arize-phoenix 7.12.1__py3-none-any.whl → 7.12.3__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.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/METADATA +1 -1
- {arize_phoenix-7.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/RECORD +14 -14
- phoenix/config.py +61 -36
- phoenix/server/api/helpers/playground_clients.py +8 -12
- phoenix/server/api/types/GenerativeProvider.py +2 -2
- phoenix/server/static/.vite/manifest.json +9 -9
- phoenix/server/static/assets/{components-Caw_U14D.js → components-DckIzNmE.js} +2 -2
- phoenix/server/static/assets/{index-EgdbaF48.js → index-Bf25Ogon.js} +1 -1
- phoenix/server/static/assets/{pages-BFZvquxr.js → pages-DL7J9q9w.js} +1 -1
- phoenix/version.py +1 -1
- {arize_phoenix-7.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/WHEEL +0 -0
- {arize_phoenix-7.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-7.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-7.12.1.dist-info → arize_phoenix-7.12.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -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=clBjtpvVN8VznxfYRBgmdG7MclXfCCvyham-Qyf0uWk,27107
|
|
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=-YxTinWwN6lwwSBelQsFBd_QYUgamTbtExBGoWCHGeU,23
|
|
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
|
|
@@ -135,7 +135,7 @@ phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=cmo8FUT3E91R139IEz
|
|
|
135
135
|
phoenix/server/api/helpers/__init__.py,sha256=m2-xaSPqUiSs91k62JaRDjFNfl-1byxBfY-m_Vxw16U,272
|
|
136
136
|
phoenix/server/api/helpers/dataset_helpers.py,sha256=DoMBTg-qXTnC_K4Evx1WKpCCYgRbITpVqyY-8efJRf0,8984
|
|
137
137
|
phoenix/server/api/helpers/experiment_run_filters.py,sha256=DOnVwrmn39eAkk2mwuZP8kIcAnR5jrOgllEwWSjsw94,29893
|
|
138
|
-
phoenix/server/api/helpers/playground_clients.py,sha256=
|
|
138
|
+
phoenix/server/api/helpers/playground_clients.py,sha256=hpXgjtrCQx1jwf6atMlW8yf6l0s2f5XCvywb141wMDE,39804
|
|
139
139
|
phoenix/server/api/helpers/playground_registry.py,sha256=CPLMziFB2wmr-dfbx7VbzO2f8YIG_k5RftzvGXYGQ1w,2570
|
|
140
140
|
phoenix/server/api/helpers/playground_spans.py,sha256=qGk7V7IZK7EkRE1mvZyROpLN5kgOahOZifFzUWmqYFc,16546
|
|
141
141
|
phoenix/server/api/input_types/AddExamplesToDatasetInput.py,sha256=mIQz0S_z8YdrktKIY6RCvtNJ2yZF9pYvTGgasUsI-54,430
|
|
@@ -238,7 +238,7 @@ phoenix/server/api/types/ExperimentRunAnnotation.py,sha256=HEbPygBwbWg10fwY3VZyM
|
|
|
238
238
|
phoenix/server/api/types/ExportedFile.py,sha256=e3GTn7B5LgsTbqiwjhMCQH7VsiqXitrBO4aCMS1lHsg,163
|
|
239
239
|
phoenix/server/api/types/Functionality.py,sha256=tzV9xdhB8zqfsjWxP66NDC7EZsplYkYO7jRbLWJIeeg,382
|
|
240
240
|
phoenix/server/api/types/GenerativeModel.py,sha256=P7eBUMXbeqaLwSSGBKdZy3a5gOLd9I0fuP8o1st6H08,193
|
|
241
|
-
phoenix/server/api/types/GenerativeProvider.py,sha256=
|
|
241
|
+
phoenix/server/api/types/GenerativeProvider.py,sha256=0XJ_K6zd5-rQOh1xVwSfWMiR8fEvXMfU3hAXTg6xWsA,3941
|
|
242
242
|
phoenix/server/api/types/Inferences.py,sha256=wv88PjcK-KwnzmTdukiAX9EV2KX4GqsKXVAUm1JtnDA,3383
|
|
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
|
|
@@ -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=JCoCqJ2EM8P-pbYM5MAsc1GC5ew3coZ_fpWs5QBBmig,2163
|
|
291
|
+
phoenix/server/static/assets/components-DckIzNmE.js,sha256=pSj56ALcyL-s3hnb1EALfeQs7ur8ok18kSMBn1icXmo,393538
|
|
292
|
+
phoenix/server/static/assets/index-Bf25Ogon.js,sha256=0hTrD_d7U3gnaQmW8nOKd95r-tnIQo0SjW90xXQfDGc,8729
|
|
293
|
+
phoenix/server/static/assets/pages-DL7J9q9w.js,sha256=aqc5j-YR5NJJ_PTL46SndO9QNSaog-m_QJJhp_TI8vQ,686674
|
|
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
|
|
@@ -337,9 +337,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
|
|
|
337
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.12.
|
|
341
|
-
arize_phoenix-7.12.
|
|
342
|
-
arize_phoenix-7.12.
|
|
343
|
-
arize_phoenix-7.12.
|
|
344
|
-
arize_phoenix-7.12.
|
|
345
|
-
arize_phoenix-7.12.
|
|
340
|
+
arize_phoenix-7.12.3.dist-info/METADATA,sha256=SL2DnU9B8l6vwIwLxghLqZgRMguSGGKmc4ABvAFlREQ,23390
|
|
341
|
+
arize_phoenix-7.12.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
342
|
+
arize_phoenix-7.12.3.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
|
|
343
|
+
arize_phoenix-7.12.3.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
344
|
+
arize_phoenix-7.12.3.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
345
|
+
arize_phoenix-7.12.3.dist-info/RECORD,,
|
phoenix/config.py
CHANGED
|
@@ -162,8 +162,8 @@ ENV_PHOENIX_GRPC_INTERCEPTOR_PATHS = "PHOENIX_GRPC_INTERCEPTOR_PATHS"
|
|
|
162
162
|
|
|
163
163
|
def server_instrumentation_is_enabled() -> bool:
|
|
164
164
|
return bool(
|
|
165
|
-
|
|
166
|
-
) or bool(
|
|
165
|
+
getenv(ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_HTTP_ENDPOINT)
|
|
166
|
+
) or bool(getenv(ENV_PHOENIX_SERVER_INSTRUMENTATION_OTLP_TRACE_COLLECTOR_GRPC_ENDPOINT))
|
|
167
167
|
|
|
168
168
|
|
|
169
169
|
def _get_temp_path() -> Path:
|
|
@@ -192,7 +192,7 @@ def get_working_dir() -> Path:
|
|
|
192
192
|
"""
|
|
193
193
|
Get the working directory for saving, loading, and exporting datasets.
|
|
194
194
|
"""
|
|
195
|
-
working_dir_str =
|
|
195
|
+
working_dir_str = getenv(ENV_PHOENIX_WORKING_DIR)
|
|
196
196
|
if working_dir_str is not None:
|
|
197
197
|
return Path(working_dir_str)
|
|
198
198
|
# Fall back to ~/.phoenix if PHOENIX_WORKING_DIR is not set
|
|
@@ -207,7 +207,7 @@ def _bool_val(env_var: str, default: Optional[bool] = None) -> Optional[bool]:
|
|
|
207
207
|
"""
|
|
208
208
|
Parses a boolean environment variable, returning `default` if the variable is not set.
|
|
209
209
|
"""
|
|
210
|
-
if (value :=
|
|
210
|
+
if (value := getenv(env_var)) is None:
|
|
211
211
|
return default
|
|
212
212
|
assert (lower := value.lower()) in (
|
|
213
213
|
"true",
|
|
@@ -224,7 +224,7 @@ def _float_val(env_var: str, default: Optional[float] = None) -> Optional[float]
|
|
|
224
224
|
"""
|
|
225
225
|
Parses a numeric environment variable, returning `default` if the variable is not set.
|
|
226
226
|
"""
|
|
227
|
-
if (value :=
|
|
227
|
+
if (value := getenv(env_var)) is None:
|
|
228
228
|
return default
|
|
229
229
|
try:
|
|
230
230
|
return float(value)
|
|
@@ -243,7 +243,7 @@ def _int_val(env_var: str, default: Optional[int] = None) -> Optional[int]:
|
|
|
243
243
|
"""
|
|
244
244
|
Parses a numeric environment variable, returning `default` if the variable is not set.
|
|
245
245
|
"""
|
|
246
|
-
if (value :=
|
|
246
|
+
if (value := getenv(env_var)) is None:
|
|
247
247
|
return default
|
|
248
248
|
try:
|
|
249
249
|
return int(value)
|
|
@@ -254,6 +254,33 @@ def _int_val(env_var: str, default: Optional[int] = None) -> Optional[int]:
|
|
|
254
254
|
)
|
|
255
255
|
|
|
256
256
|
|
|
257
|
+
@overload
|
|
258
|
+
def getenv(key: str) -> Optional[str]: ...
|
|
259
|
+
@overload
|
|
260
|
+
def getenv(key: str, default: str) -> str: ...
|
|
261
|
+
def getenv(key: str, default: Optional[str] = None) -> Optional[str]:
|
|
262
|
+
"""
|
|
263
|
+
Retrieves the value of an environment variable.
|
|
264
|
+
|
|
265
|
+
Parameters
|
|
266
|
+
----------
|
|
267
|
+
key : str
|
|
268
|
+
The name of the environment variable.
|
|
269
|
+
default : Optional[str], optional
|
|
270
|
+
The default value to return if the environment variable is not set, by default None.
|
|
271
|
+
|
|
272
|
+
Returns
|
|
273
|
+
-------
|
|
274
|
+
Optional[str]
|
|
275
|
+
The value of the environment variable, or `default` if the variable is not set.
|
|
276
|
+
Leading and trailing whitespaces are stripped from the value, assuming they were
|
|
277
|
+
inadvertently added.
|
|
278
|
+
"""
|
|
279
|
+
if (value := os.getenv(key)) is None:
|
|
280
|
+
return default
|
|
281
|
+
return value.strip()
|
|
282
|
+
|
|
283
|
+
|
|
257
284
|
def get_env_enable_auth() -> bool:
|
|
258
285
|
"""
|
|
259
286
|
Gets the value of the PHOENIX_ENABLE_AUTH environment variable.
|
|
@@ -273,7 +300,7 @@ def get_env_phoenix_secret() -> Optional[str]:
|
|
|
273
300
|
Gets the value of the PHOENIX_SECRET environment variable
|
|
274
301
|
and performs validation.
|
|
275
302
|
"""
|
|
276
|
-
phoenix_secret =
|
|
303
|
+
phoenix_secret = getenv(ENV_PHOENIX_SECRET)
|
|
277
304
|
if phoenix_secret is None:
|
|
278
305
|
return None
|
|
279
306
|
from phoenix.auth import REQUIREMENTS_FOR_PHOENIX_SECRET
|
|
@@ -285,7 +312,7 @@ def get_env_phoenix_secret() -> Optional[str]:
|
|
|
285
312
|
def get_env_default_admin_initial_password() -> str:
|
|
286
313
|
from phoenix.auth import DEFAULT_ADMIN_PASSWORD
|
|
287
314
|
|
|
288
|
-
return
|
|
315
|
+
return getenv(ENV_PHOENIX_DEFAULT_ADMIN_INITIAL_PASSWORD) or DEFAULT_ADMIN_PASSWORD
|
|
289
316
|
|
|
290
317
|
|
|
291
318
|
def get_env_phoenix_use_secure_cookies() -> bool:
|
|
@@ -293,7 +320,7 @@ def get_env_phoenix_use_secure_cookies() -> bool:
|
|
|
293
320
|
|
|
294
321
|
|
|
295
322
|
def get_env_phoenix_api_key() -> Optional[str]:
|
|
296
|
-
return
|
|
323
|
+
return getenv(ENV_PHOENIX_API_KEY)
|
|
297
324
|
|
|
298
325
|
|
|
299
326
|
def get_env_auth_settings() -> tuple[bool, Optional[str]]:
|
|
@@ -354,7 +381,7 @@ def get_env_refresh_token_expiry() -> timedelta:
|
|
|
354
381
|
|
|
355
382
|
def get_env_csrf_trusted_origins() -> list[str]:
|
|
356
383
|
origins: list[str] = []
|
|
357
|
-
if not (csrf_trusted_origins :=
|
|
384
|
+
if not (csrf_trusted_origins := getenv(ENV_PHOENIX_CSRF_TRUSTED_ORIGINS)):
|
|
358
385
|
return origins
|
|
359
386
|
for origin in csrf_trusted_origins.split(","):
|
|
360
387
|
if not origin:
|
|
@@ -369,19 +396,19 @@ def get_env_csrf_trusted_origins() -> list[str]:
|
|
|
369
396
|
|
|
370
397
|
|
|
371
398
|
def get_env_smtp_username() -> str:
|
|
372
|
-
return
|
|
399
|
+
return getenv(ENV_PHOENIX_SMTP_USERNAME, "")
|
|
373
400
|
|
|
374
401
|
|
|
375
402
|
def get_env_smtp_password() -> str:
|
|
376
|
-
return
|
|
403
|
+
return getenv(ENV_PHOENIX_SMTP_PASSWORD, "")
|
|
377
404
|
|
|
378
405
|
|
|
379
406
|
def get_env_smtp_mail_from() -> str:
|
|
380
|
-
return
|
|
407
|
+
return getenv(ENV_PHOENIX_SMTP_MAIL_FROM) or "noreply@arize.com"
|
|
381
408
|
|
|
382
409
|
|
|
383
410
|
def get_env_smtp_hostname() -> str:
|
|
384
|
-
return
|
|
411
|
+
return getenv(ENV_PHOENIX_SMTP_HOSTNAME, "")
|
|
385
412
|
|
|
386
413
|
|
|
387
414
|
def get_env_smtp_port() -> int:
|
|
@@ -410,16 +437,14 @@ class OAuth2ClientConfig:
|
|
|
410
437
|
def from_env(cls, idp_name: str) -> "OAuth2ClientConfig":
|
|
411
438
|
idp_name_upper = idp_name.upper()
|
|
412
439
|
if not (
|
|
413
|
-
client_id :=
|
|
414
|
-
client_id_env_var := f"PHOENIX_OAUTH2_{idp_name_upper}_CLIENT_ID"
|
|
415
|
-
)
|
|
440
|
+
client_id := getenv(client_id_env_var := f"PHOENIX_OAUTH2_{idp_name_upper}_CLIENT_ID")
|
|
416
441
|
):
|
|
417
442
|
raise ValueError(
|
|
418
443
|
f"A client id must be set for the {idp_name} OAuth2 IDP "
|
|
419
444
|
f"via the {client_id_env_var} environment variable"
|
|
420
445
|
)
|
|
421
446
|
if not (
|
|
422
|
-
client_secret :=
|
|
447
|
+
client_secret := getenv(
|
|
423
448
|
client_secret_env_var := f"PHOENIX_OAUTH2_{idp_name_upper}_CLIENT_SECRET"
|
|
424
449
|
)
|
|
425
450
|
):
|
|
@@ -429,7 +454,7 @@ class OAuth2ClientConfig:
|
|
|
429
454
|
)
|
|
430
455
|
if not (
|
|
431
456
|
oidc_config_url := (
|
|
432
|
-
|
|
457
|
+
getenv(
|
|
433
458
|
oidc_config_url_env_var := f"PHOENIX_OAUTH2_{idp_name_upper}_OIDC_CONFIG_URL",
|
|
434
459
|
)
|
|
435
460
|
)
|
|
@@ -447,7 +472,7 @@ class OAuth2ClientConfig:
|
|
|
447
472
|
)
|
|
448
473
|
return cls(
|
|
449
474
|
idp_name=idp_name,
|
|
450
|
-
idp_display_name=
|
|
475
|
+
idp_display_name=getenv(
|
|
451
476
|
f"PHOENIX_OAUTH2_{idp_name_upper}_DISPLAY_NAME",
|
|
452
477
|
_get_default_idp_display_name(idp_name),
|
|
453
478
|
),
|
|
@@ -541,7 +566,7 @@ def get_exported_files(directory: Path) -> list[Path]:
|
|
|
541
566
|
|
|
542
567
|
|
|
543
568
|
def get_env_port() -> int:
|
|
544
|
-
if not (port :=
|
|
569
|
+
if not (port := getenv(ENV_PHOENIX_PORT)):
|
|
545
570
|
return PORT
|
|
546
571
|
if port.isnumeric():
|
|
547
572
|
return int(port)
|
|
@@ -560,7 +585,7 @@ def get_env_port() -> int:
|
|
|
560
585
|
|
|
561
586
|
|
|
562
587
|
def get_env_grpc_port() -> int:
|
|
563
|
-
if not (port :=
|
|
588
|
+
if not (port := getenv(ENV_PHOENIX_GRPC_PORT)):
|
|
564
589
|
return GRPC_PORT
|
|
565
590
|
if port.isnumeric():
|
|
566
591
|
return int(port)
|
|
@@ -571,11 +596,11 @@ def get_env_grpc_port() -> int:
|
|
|
571
596
|
|
|
572
597
|
|
|
573
598
|
def get_env_host() -> str:
|
|
574
|
-
return
|
|
599
|
+
return getenv(ENV_PHOENIX_HOST) or HOST
|
|
575
600
|
|
|
576
601
|
|
|
577
602
|
def get_env_host_root_path() -> str:
|
|
578
|
-
if (host_root_path :=
|
|
603
|
+
if (host_root_path := getenv(ENV_PHOENIX_HOST_ROOT_PATH)) is None:
|
|
579
604
|
return HOST_ROOT_PATH
|
|
580
605
|
if not host_root_path.startswith("/"):
|
|
581
606
|
raise ValueError(
|
|
@@ -591,15 +616,15 @@ def get_env_host_root_path() -> str:
|
|
|
591
616
|
|
|
592
617
|
|
|
593
618
|
def get_env_collector_endpoint() -> Optional[str]:
|
|
594
|
-
return
|
|
619
|
+
return getenv(ENV_PHOENIX_COLLECTOR_ENDPOINT)
|
|
595
620
|
|
|
596
621
|
|
|
597
622
|
def get_env_project_name() -> str:
|
|
598
|
-
return
|
|
623
|
+
return getenv(ENV_PHOENIX_PROJECT_NAME, DEFAULT_PROJECT_NAME)
|
|
599
624
|
|
|
600
625
|
|
|
601
626
|
def get_env_database_connection_str() -> str:
|
|
602
|
-
env_url =
|
|
627
|
+
env_url = getenv(ENV_PHOENIX_SQL_DATABASE_URL)
|
|
603
628
|
if env_url is None:
|
|
604
629
|
working_dir = get_working_dir()
|
|
605
630
|
return f"sqlite:///{working_dir}/phoenix.db"
|
|
@@ -609,11 +634,11 @@ def get_env_database_connection_str() -> str:
|
|
|
609
634
|
def get_env_database_schema() -> Optional[str]:
|
|
610
635
|
if get_env_database_connection_str().startswith("sqlite"):
|
|
611
636
|
return None
|
|
612
|
-
return
|
|
637
|
+
return getenv(ENV_PHOENIX_SQL_DATABASE_SCHEMA)
|
|
613
638
|
|
|
614
639
|
|
|
615
640
|
def get_env_enable_prometheus() -> bool:
|
|
616
|
-
if (enable_promotheus :=
|
|
641
|
+
if (enable_promotheus := getenv(ENV_PHOENIX_ENABLE_PROMETHEUS)) is None or (
|
|
617
642
|
enable_promotheus_lower := enable_promotheus.lower()
|
|
618
643
|
) == "false":
|
|
619
644
|
return False
|
|
@@ -626,7 +651,7 @@ def get_env_enable_prometheus() -> bool:
|
|
|
626
651
|
|
|
627
652
|
|
|
628
653
|
def get_env_client_headers() -> dict[str, str]:
|
|
629
|
-
headers = parse_env_headers(
|
|
654
|
+
headers = parse_env_headers(getenv(ENV_PHOENIX_CLIENT_HEADERS))
|
|
630
655
|
if (api_key := get_env_phoenix_api_key()) and "authorization" not in [
|
|
631
656
|
k.lower() for k in headers
|
|
632
657
|
]:
|
|
@@ -661,7 +686,7 @@ class LoggingMode(Enum):
|
|
|
661
686
|
|
|
662
687
|
|
|
663
688
|
def get_env_logging_mode() -> LoggingMode:
|
|
664
|
-
if (logging_mode :=
|
|
689
|
+
if (logging_mode := getenv(ENV_LOGGING_MODE)) is None:
|
|
665
690
|
return LoggingMode.DEFAULT
|
|
666
691
|
try:
|
|
667
692
|
return LoggingMode(logging_mode.lower().strip())
|
|
@@ -688,7 +713,7 @@ def get_env_db_logging_level() -> int:
|
|
|
688
713
|
|
|
689
714
|
|
|
690
715
|
def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
|
|
691
|
-
env_value =
|
|
716
|
+
env_value = getenv(ENV_PHOENIX_FASTAPI_MIDDLEWARE_PATHS, "")
|
|
692
717
|
paths = []
|
|
693
718
|
for entry in env_value.split(","):
|
|
694
719
|
entry = entry.strip()
|
|
@@ -703,7 +728,7 @@ def get_env_fastapi_middleware_paths() -> list[tuple[str, str]]:
|
|
|
703
728
|
|
|
704
729
|
|
|
705
730
|
def get_env_gql_extension_paths() -> list[tuple[str, str]]:
|
|
706
|
-
env_value =
|
|
731
|
+
env_value = getenv(ENV_PHOENIX_GQL_EXTENSION_PATHS, "")
|
|
707
732
|
paths = []
|
|
708
733
|
for entry in env_value.split(","):
|
|
709
734
|
entry = entry.strip()
|
|
@@ -718,7 +743,7 @@ def get_env_gql_extension_paths() -> list[tuple[str, str]]:
|
|
|
718
743
|
|
|
719
744
|
|
|
720
745
|
def get_env_grpc_interceptor_paths() -> list[tuple[str, str]]:
|
|
721
|
-
env_value =
|
|
746
|
+
env_value = getenv(ENV_PHOENIX_GRPC_INTERCEPTOR_PATHS, "")
|
|
722
747
|
paths = []
|
|
723
748
|
for entry in env_value.split(","):
|
|
724
749
|
entry = entry.strip()
|
|
@@ -733,7 +758,7 @@ def get_env_grpc_interceptor_paths() -> list[tuple[str, str]]:
|
|
|
733
758
|
|
|
734
759
|
|
|
735
760
|
def _get_logging_level(env_var: str, default_level: int) -> int:
|
|
736
|
-
logging_level =
|
|
761
|
+
logging_level = getenv(env_var)
|
|
737
762
|
if not logging_level:
|
|
738
763
|
return default_level
|
|
739
764
|
|
|
@@ -753,7 +778,7 @@ def _get_logging_level(env_var: str, default_level: int) -> int:
|
|
|
753
778
|
|
|
754
779
|
|
|
755
780
|
def get_env_log_migrations() -> bool:
|
|
756
|
-
log_migrations =
|
|
781
|
+
log_migrations = getenv(ENV_LOG_MIGRATIONS)
|
|
757
782
|
# Default to True
|
|
758
783
|
if log_migrations is None:
|
|
759
784
|
return True
|
|
@@ -4,7 +4,6 @@ import asyncio
|
|
|
4
4
|
import importlib.util
|
|
5
5
|
import inspect
|
|
6
6
|
import json
|
|
7
|
-
import os
|
|
8
7
|
import time
|
|
9
8
|
from abc import ABC, abstractmethod
|
|
10
9
|
from collections.abc import AsyncIterator, Callable, Iterator
|
|
@@ -22,6 +21,7 @@ from strawberry import UNSET
|
|
|
22
21
|
from strawberry.scalars import JSON as JSONScalarType
|
|
23
22
|
from typing_extensions import TypeAlias, assert_never
|
|
24
23
|
|
|
24
|
+
from phoenix.config import getenv
|
|
25
25
|
from phoenix.evals.models.rate_limiters import (
|
|
26
26
|
AsyncCallable,
|
|
27
27
|
GenericType,
|
|
@@ -483,8 +483,8 @@ class OpenAIStreamingClient(OpenAIBaseStreamingClient):
|
|
|
483
483
|
) -> None:
|
|
484
484
|
from openai import AsyncOpenAI
|
|
485
485
|
|
|
486
|
-
base_url = model.base_url or
|
|
487
|
-
if not (api_key := api_key or
|
|
486
|
+
base_url = model.base_url or getenv("OPENAI_BASE_URL")
|
|
487
|
+
if not (api_key := api_key or getenv("OPENAI_API_KEY")):
|
|
488
488
|
if not base_url:
|
|
489
489
|
raise BadRequest("An API key is required for OpenAI models")
|
|
490
490
|
api_key = "sk-fake-api-key"
|
|
@@ -656,11 +656,11 @@ class AzureOpenAIStreamingClient(OpenAIBaseStreamingClient):
|
|
|
656
656
|
):
|
|
657
657
|
from openai import AsyncAzureOpenAI
|
|
658
658
|
|
|
659
|
-
if not (api_key := api_key or
|
|
659
|
+
if not (api_key := api_key or getenv("AZURE_OPENAI_API_KEY")):
|
|
660
660
|
raise BadRequest("An Azure API key is required for Azure OpenAI models")
|
|
661
|
-
if not (endpoint := model.endpoint or
|
|
661
|
+
if not (endpoint := model.endpoint or getenv("AZURE_OPENAI_ENDPOINT")):
|
|
662
662
|
raise BadRequest("An Azure endpoint is required for Azure OpenAI models")
|
|
663
|
-
if not (api_version := model.api_version or
|
|
663
|
+
if not (api_version := model.api_version or getenv("OPENAI_API_VERSION")):
|
|
664
664
|
raise BadRequest("An OpenAI API version is required for Azure OpenAI models")
|
|
665
665
|
client = AsyncAzureOpenAI(
|
|
666
666
|
api_key=api_key,
|
|
@@ -697,7 +697,7 @@ class AnthropicStreamingClient(PlaygroundStreamingClient):
|
|
|
697
697
|
super().__init__(model=model, api_key=api_key)
|
|
698
698
|
self._attributes[LLM_PROVIDER] = OpenInferenceLLMProviderValues.ANTHROPIC.value
|
|
699
699
|
self._attributes[LLM_SYSTEM] = OpenInferenceLLMSystemValues.ANTHROPIC.value
|
|
700
|
-
if not (api_key := api_key or
|
|
700
|
+
if not (api_key := api_key or getenv("ANTHROPIC_API_KEY")):
|
|
701
701
|
raise BadRequest("An API key is required for Anthropic models")
|
|
702
702
|
self.client = anthropic.AsyncAnthropic(api_key=api_key)
|
|
703
703
|
self.model_name = model.name
|
|
@@ -877,11 +877,7 @@ class GeminiStreamingClient(PlaygroundStreamingClient):
|
|
|
877
877
|
super().__init__(model=model, api_key=api_key)
|
|
878
878
|
self._attributes[LLM_PROVIDER] = OpenInferenceLLMProviderValues.GOOGLE.value
|
|
879
879
|
self._attributes[LLM_SYSTEM] = OpenInferenceLLMSystemValues.VERTEXAI.value
|
|
880
|
-
if not (
|
|
881
|
-
api_key := api_key
|
|
882
|
-
or os.environ.get("GEMINI_API_KEY")
|
|
883
|
-
or os.environ.get("GOOGLE_API_KEY")
|
|
884
|
-
):
|
|
880
|
+
if not (api_key := api_key or getenv("GEMINI_API_KEY") or getenv("GOOGLE_API_KEY")):
|
|
885
881
|
raise BadRequest("An API key is required for Gemini models")
|
|
886
882
|
google_genai.configure(api_key=api_key)
|
|
887
883
|
self.model_name = model.name
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import os
|
|
2
1
|
from enum import Enum
|
|
3
2
|
from typing import Any, ClassVar, Optional, Union
|
|
4
3
|
|
|
5
4
|
import strawberry
|
|
6
5
|
from openinference.semconv.trace import OpenInferenceLLMProviderValues, SpanAttributes
|
|
7
6
|
|
|
7
|
+
from phoenix.config import getenv
|
|
8
8
|
from phoenix.trace.attributes import get_attribute_value
|
|
9
9
|
|
|
10
10
|
|
|
@@ -72,7 +72,7 @@ class GenerativeProvider:
|
|
|
72
72
|
|
|
73
73
|
@strawberry.field(description="Whether the credentials are set on the server for the provider") # type: ignore
|
|
74
74
|
async def api_key_set(self) -> bool:
|
|
75
|
-
return
|
|
75
|
+
return getenv(self.model_provider_to_api_key_env_var_map[self.key]) is not None
|
|
76
76
|
|
|
77
77
|
@classmethod
|
|
78
78
|
def _infer_model_provider_from_model_name(
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-DckIzNmE.js": {
|
|
3
|
+
"file": "assets/components-DckIzNmE.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
6
|
"_vendor-DvC8cT4X.js",
|
|
7
|
-
"_pages-
|
|
7
|
+
"_pages-DL7J9q9w.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-DL7J9q9w.js": {
|
|
14
|
+
"file": "assets/pages-DL7J9q9w.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
17
|
"_vendor-DvC8cT4X.js",
|
|
18
18
|
"_vendor-arizeai-Do1793cv.js",
|
|
19
|
-
"_components-
|
|
19
|
+
"_components-DckIzNmE.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-Bf25Ogon.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-DL7J9q9w.js",
|
|
80
|
+
"_components-DckIzNmE.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 h,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 Oa,g as ge,h as _a,i as Fa,k as R1,l,m as Na,o as Se,C as t1,p as Be,q as $e,t as N,u as Ra,v as Ha,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 Ka,H as Ba,I as $a,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Za,S as Ga,T as Wa,U,V as Ua,W as ja,X as Qa,Y as nt,Z as qa,_ as Xa,a0 as tt,a1 as Ya,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Ja,a9 as ei,aa as ni,ab as ti,ac as pn,ad as ai,ae as ii,af as ri,ag as gn,ah as oi,ai as li,aj as si,ak as I1,al as G1,am as ci,an as di,ao as ui,ap as mi,aq as hi,ar as pi,as as gi,at as fi,au as Ci,av as bi,aw as Li,ax as vi,ay as yi,az as wi,aA as ki,aB as Si,aC as xi}from"./vendor-DvC8cT4X.js";import{m as Mi,T as Ti,a as fn,u as Ii}from"./pages-
|
|
1
|
+
import{r as h,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 Oa,g as ge,h as _a,i as Fa,k as R1,l,m as Na,o as Se,C as t1,p as Be,q as $e,t as N,u as Ra,v as Ha,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 Ka,H as Ba,I as $a,J as Z1,K as Jn,M as a1,N as i1,O as et,P as r1,Q as Za,S as Ga,T as Wa,U,V as Ua,W as ja,X as Qa,Y as nt,Z as qa,_ as Xa,a0 as tt,a1 as Ya,a2 as V,a3 as at,a4 as Te,a5 as m1,a6 as Ee,a7 as F,a8 as Ja,a9 as ei,aa as ni,ab as ti,ac as pn,ad as ai,ae as ii,af as ri,ag as gn,ah as oi,ai as li,aj as si,ak as I1,al as G1,am as ci,an as di,ao as ui,ap as mi,aq as hi,ar as pi,as as gi,at as fi,au as Ci,av as bi,aw as Li,ax as vi,ay as yi,az as wi,aA as ki,aB as Si,aC as xi}from"./vendor-DvC8cT4X.js";import{m as Mi,T as Ti,a as fn,u as Ii}from"./pages-DL7J9q9w.js";import{u as Ai,_ as it,a as te,T as j,b as zi,c as Ei,R as J,d as Ge,e as ne,f as Vi,E as rt,g as B,h as W1,i as Ve,j as ot,k as ve,D as h1,l as o1,I as U1,m as j1,n as lt,P as Q1,C as p1,o as g1,A as We,L as Ce,p as Di,q as ye,F as st,r as Pi,s as Oi,t as _i,v as ce,w as de,x as Fi,y as Ni,z as Cn,B as Ri}from"./vendor-arizeai-Do1793cv.js";import{L as ct,a as dt,l as H1,j as ut,h as Hi,b as Ki,c as Bi,d as $i,e as Zi,f as Gi,s as Wi,R as Ue,g as mt,n as je,i as ht,E as q1,p as Ui,k as ji}from"./vendor-codemirror-BzwZPyJM.js";import{V as Qi}from"./vendor-three-DwGkEfCM.js";const pt=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
|
|
@@ -144,7 +144,7 @@ import{r as h,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
|
|
|
144
144
|
id
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
-
`}}}();Ct.hash="e8fa488a0d466b5e40fdadc1e5227a57";const qi=30,bn=5,Ln=100,Xi=0,vn=0,yn=.99,Yi=500,wn=300,kn=1e5,Ji=10,Sn=1,er=2,nr=1,tr=0;var z=(n=>(n.inferences="inferences",n.correctness="correctness",n.dimension="dimension",n))(z||{}),Ae=(n=>(n.list="list",n.gallery="gallery",n))(Ae||{}),Ie=(n=>(n.small="small",n.medium="medium",n.large="large",n))(Ie||{}),E=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(E||{}),H=(n=>(n.correct="correct",n.incorrect="incorrect",n.unknown="unknown",n))(H||{});const ar=["#05fbff","#cb8afd"],ir=["#00add0","#4500d9"],le="#a5a5a5",xe=le;var ee=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(ee||{});function D(n){throw new Error("Unreachable")}function X1(n){return typeof n=="number"||n===null}function rr(n){return typeof n=="string"||n===null}function hc(n){return Array.isArray(n)?n.every(t=>typeof t=="string"):!1}function Y1(n){return typeof n=="object"&&n!==null}function pc(n){return Y1(n)&&Object.keys(n).every(t=>typeof t=="string")}const gc=()=>n=>n,J1=h.createContext(null);function f1(){const n=G.useContext(J1);if(n===null)throw new Error("useInferences must be used within a InferencesProvider");return n}function fc(n){return e(J1.Provider,{value:{primaryInferences:n.primaryInferences,referenceInferences:n.referenceInferences,corpusInferences:n.corpusInferences,getInferencesNameByRole:t=>{var a,i;switch(t){case ee.primary:return n.primaryInferences.name;case ee.reference:return((a=n.referenceInferences)==null?void 0:a.name)??"reference";case ee.corpus:return((i=n.corpusInferences)==null?void 0:i.name)??"corpus";default:D()}}},children:n.children})}const en=h.createContext(null);function Cc({children:n,...t}){const[a]=h.useState(()=>Sr(t));return e(en.Provider,{value:a,children:n})}function y(n,t){const a=h.useContext(en);if(!a)throw new Error("Missing PointCloudContext.Provider in the tree");return Wn(a,n,t)}var X=(n=>(n.last_hour="Last Hour",n.last_day="Last Day",n.last_week="Last Week",n.last_month="Last Month",n.last_3_months="Last 3 Months",n.first_hour="First Hour",n.first_day="First Day",n.first_week="First Week",n.first_month="First Month",n.all="All",n))(X||{});const bt=h.createContext(null);function or(){const n=h.useContext(bt);if(n===null)throw new Error("useTimeRange must be used within a TimeRangeProvider");return n}function lr(n,t){return h.useMemo(()=>{switch(n){case"Last Hour":{const i=we(Fa(t.end),{roundingMethod:"ceil"});return{start:R1(i,1),end:i}}case"Last Day":{const i=we(_a(t.end),{roundingMethod:"ceil"});return{start:ge(i,1),end:i}}case"Last Week":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,7),end:i}}case"Last Month":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,30),end:i}}case"Last 3 Months":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,90),end:i}}case"First Hour":{const i=N1(t.start);return{start:i,end:Oa(i,1)}}case"First Day":{const i=ke(t.start);return{start:i,end:e1(i,1)}}case"First Week":{const i=T1(t.start);return{start:i,end:e1(i,7)}}case"First Month":{const i=T1(t.start);return{start:i,end:e1(i,30)}}case"All":{const i=we(Xe(t.end),{roundingMethod:"floor"});return{start:T1(t.start),end:i}}default:D()}},[n,t])}function bc(n){const[t,a]=h.useState("Last Month"),i=lr(t,n.timeRangeBounds),r=h.useCallback(o=>{h.startTransition(()=>{a(o)})},[]);return e(bt.Provider,{value:{timeRange:i,timePreset:t,setTimePreset:r},children:n.children})}const Lt=h.createContext(null);function Lc({children:n}){const[t,a]=Ai({style:{zIndex:1e3}}),i=h.useCallback(o=>{t({variant:"danger",...o})},[t]),r=h.useCallback(o=>{t({variant:"success",...o})},[t]);return l(Lt.Provider,{value:{notify:t,notifyError:i,notifySuccess:r},children:[n,a]})}function vt(){const n=h.useContext(Lt);if(n===null)throw new Error("useGlobalNotification must be used within a NotificationProvider");return n}function vc(){return vt().notifyError}function C1(){return vt().notifySuccess}const yt="arize-phoenix-theme";function wt(){return localStorage.getItem(yt)==="light"?"light":"dark"}const nn=h.createContext(null);function Q(){const n=h.useContext(nn);if(n===null)throw new Error("useTheme must be used within a ThemeProvider");return n}function yc(n){const[t,a]=h.useState(wt()),i=h.useCallback(r=>{localStorage.setItem(yt,r),a(r)},[]);return e(nn.Provider,{value:{theme:t,setTheme:i},children:n.children})}function sr(n){return n.endsWith("/")?n.slice(0,-1):n}const kt=sr(window.Config.basename),cr=window.location.protocol==="https:",Qe=`${window.location.protocol}//${window.location.host}${kt}`,dr=`${cr?"wss":"ws"}://${window.location.host}${kt}`,wc=window.Config.platformVersion,Re="returnUrl";function xn(n,t){const a=new URL(n,window.location.origin);return t.forEach((i,r)=>{a.searchParams.append(r,i)}),a.pathname+a.search}function ur(){const n=window.Config.basename,t=n==null||n===""||n==="/",a=n!=null&&n.startsWith("/")&&!n.endsWith("/");if(!(t||a))throw new Error(`Invalid basename: ${n}`);const i=window.location.pathname,r=window.location.origin,o=new URLSearchParams(window.location.search);if(t){const s=new URL("/login",r);return s.searchParams.set(Re,xn(i,o)),s.pathname+s.search}if(i.startsWith(n)){const s=i.slice(n.length);if(s===""||s.startsWith("/")){const d=new URL(n+"/login",r);return d.searchParams.set(Re,xn(s,o)),d.pathname+d.search}}return n+"/login"}function kc(n){const t=window.Config.basename,a=t==null||t===""||t==="/",i=t!=null&&t.startsWith("/")&&!t.endsWith("/");if(!(a||i))throw new Error(`Invalid basename: ${t}`);return a?n:t+n}const Sc=({path:n,searchParams:t})=>{const i=new URL(window.location.href).searchParams.get(Re),r=new URLSearchParams(t||{});i&&r.set(Re,i);const o=r.toString();return`${n}${o?`?${o}`:""}`},mr=n=>!(typeof n!="string"||!n.startsWith("/")||n.replace(/\\/g,"/").startsWith("//")),hr=n=>mr(n)?n:"/",xc=()=>{const n=new URL(window.location.href);return hr(n.searchParams.get(Re))},pr=Qe+"/auth/refresh";class Mn extends Error{constructor(){super("Unauthorized")}}async function gr(n,t){try{return await fetch(n,t).then(a=>{if(a.status===401)throw new Mn;return a})}catch(a){if(a instanceof Mn)return await St(),fetch(n,t);if(a instanceof Error&&a.name==="AbortError")throw a}throw new Error("An unexpected error occurred while fetching data")}let Oe=null;async function St(){return Oe||(Oe=fetch(pr,{method:"POST"}).then(n=>(n.ok||(window.location.href=ur()),Oe=null,n)),Oe)}const fr=Qe+"/graphql",xt=window.Config.authenticationEnabled,Cr=xt?gr:fetch;function br(n,t,a){return Se.Observable.create(i=>{const r=new AbortController;return Cr(n,{...t,signal:r.signal}).then(o=>o.json()).then(o=>{const s=a==null?void 0:a(o);if(s)throw s;i.next(o),i.complete()}).catch(o=>{o.name==="AbortError"?i.complete():i.error(o)}),()=>{r.abort()}})}const Lr=(n,t,a)=>br(fr,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:n.text,variables:t})},i=>{if(!(!Y1(i)||!("errors"in i))&&Array.isArray(i.errors))return new Error(`Error fetching GraphQL query '${n.name}' with variables '${JSON.stringify(t)}': ${JSON.stringify(i.errors)}`)}),vr=Na({url:`${dr}/graphql`,shouldRetry:n=>xt&&n instanceof Event&&n.type==="error"?(St(),!0):!1}),yr=(n,t)=>Se.Observable.create(a=>vr.subscribe({operationName:n.name,query:n.text,variables:t},a)),qe=new Se.Environment({network:Se.Network.create(Lr,yr),store:new Se.Store(new Se.RecordSource,{gcReleaseBufferSize:10})});function Mt(n){return n.includes("PRIMARY")?ee.primary:n.includes("CORPUS")?ee.corpus:ee.reference}function tn(n){const t=[],a=[],i=[];return n.forEach(r=>{const o=Mt(r);o==ee.primary?t.push(r):o==ee.corpus?i.push(r):a.push(r)}),{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}}const l1=10,Fe="unknown",Tt=Ha,It=Ra,wr=n=>It[n],kr=n=>Tt(n/l1);var ze=(n=>(n.move="move",n.select="select",n))(ze||{}),an=(n=>(n.default="default",n.highlight="highlight",n))(an||{});const Me=()=>wt()==="light"?ir:ar;function Mc(){const n=Me();return{coloringStrategy:z.inferences,pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0},pointGroupColors:{[E.primary]:n[0],[E.reference]:n[1],[E.corpus]:le},metric:{type:"drift",metric:"euclideanDistance"}}}function Tc(){const n=Me();return{coloringStrategy:z.inferences,pointGroupVisibility:{[E.primary]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:n[0],[E.corpus]:le},metric:{type:"retrieval",metric:"queryDistance"},clusterSort:{dir:"desc",column:"primaryMetricValue"}}}function Ic(){return{coloringStrategy:z.correctness,pointGroupVisibility:{[H.correct]:!0,[H.incorrect]:!0,[H.unknown]:!0},pointGroupColors:{[H.correct]:t1.Discrete2.LightBlueOrange[0],[H.incorrect]:t1.Discrete2.LightBlueOrange[1],[H.unknown]:xe},metric:{type:"performance",metric:"accuracyScore"},clusterSort:{dir:"asc",column:"primaryMetricValue"}}}const Sr=n=>{const t={loading:!1,errorMessage:null,points:[],eventIdToDataMap:new Map,clusters:[],clusterSort:{dir:"desc",column:"driftRatio"},pointData:null,selectedEventIds:new Set,hoveredEventId:null,highlightedClusterId:null,selectedClusterId:null,canvasMode:"move",pointSizeScale:1,clusterColorMode:"default",coloringStrategy:z.inferences,inferencesVisibility:{primary:!0,reference:!0,corpus:!0},pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:Me()[0],[E.reference]:Me()[1],[E.corpus]:le},eventIdToGroup:{},selectionDisplay:Ae.gallery,selectionGridSize:Ie.large,dimension:null,dimensionMetadata:null,umapParameters:{minDist:Xi,nNeighbors:qi,nSamples:Yi},hdbscanParameters:{minClusterSize:Ji,clusterMinSamples:nr,clusterSelectionEpsilon:tr},clustersLoading:!1,metric:{type:"drift",metric:"euclideanDistance"},selectionSearchText:""},a=(i,r)=>({...t,...n,setInitialData:async({points:o,clusters:s,retrievals:c})=>{const d=r(),u=new Map,p=c.reduce((C,b)=>{const{queryId:k}=b;return C[k]?C[k].push(b):C[k]=[b],C},{});o.forEach(C=>{C={...C,retrievals:p[C.eventId]??[]},u.set(C.eventId,C)});const g=s.map(In).sort(z1(d.clusterSort));i({loading:!1,points:o,eventIdToDataMap:u,clusters:g,clustersLoading:!1,selectedEventIds:new Set,selectedClusterId:null,pointData:null,eventIdToGroup:pe({points:o,coloringStrategy:d.coloringStrategy,pointsData:d.pointData??{},dimension:d.dimension||null,dimensionMetadata:d.dimensionMetadata})});const f=await Tr(o.map(C=>C.eventId)).catch(()=>i({errorMessage:"Failed to load the point events"}));f&&i({pointData:f,clusters:g,clustersLoading:!1,eventIdToGroup:pe({points:o,coloringStrategy:d.coloringStrategy,pointsData:f??{},dimension:d.dimension||null,dimensionMetadata:d.dimensionMetadata})})},setClusters:o=>{const s=r(),c=o.map(In).sort(z1(s.clusterSort));i({clusters:c,clustersLoading:!1,selectedClusterId:null,highlightedClusterId:null})},setClusterSort:o=>{const c=[...r().clusters].sort(z1(o));i({clusterSort:o,clusters:c})},setSelectedEventIds:o=>i({selectedEventIds:o,selectionSearchText:""}),setHoveredEventId:o=>i({hoveredEventId:o}),setHighlightedClusterId:o=>i({highlightedClusterId:o}),setSelectedClusterId:o=>i({selectedClusterId:o,highlightedClusterId:null}),setPointSizeScale:o=>i({pointSizeScale:o}),setCanvasMode:o=>i({canvasMode:o}),setClusterColorMode:o=>i({clusterColorMode:o}),setColoringStrategy:o=>{const s=r();switch(i({coloringStrategy:o}),o){case z.correctness:i({pointGroupVisibility:{[H.correct]:!0,[H.incorrect]:!0,[H.unknown]:!0},pointGroupColors:{[H.correct]:t1.Discrete2.LightBlueOrange[0],[H.incorrect]:t1.Discrete2.LightBlueOrange[1],[H.unknown]:xe},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break;case z.inferences:{i({pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:Me()[0],[E.reference]:Me()[1],[E.corpus]:le},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break}case z.dimension:{i({pointGroupVisibility:{unknown:!0},pointGroupColors:{unknown:xe},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break}default:D()}},inferencesVisibility:{primary:!0,reference:!0,corpus:!0},setInferencesVisibility:o=>i({inferencesVisibility:o}),setPointGroupVisibility:o=>i({pointGroupVisibility:o}),selectionDisplay:Ae.gallery,setSelectionDisplay:o=>i({selectionDisplay:o}),setSelectionGridSize:o=>i({selectionGridSize:o}),reset:()=>{i({points:[],clusters:[],selectedEventIds:new Set,selectedClusterId:null,eventIdToGroup:{}})},setDimension:async o=>{const s=r();i({dimension:o,dimensionMetadata:null});const c=await Mr(o).catch(()=>i({errorMessage:"Failed to load the dimension metadata"}));if(c){if(i({dimensionMetadata:c}),c.categories&&c.categories.length){const d=c.categories.length,p=d<=It.length?wr:g=>Tt(g/d);i({pointGroupVisibility:{...c.categories.reduce((g,f)=>({...g,[f]:!0}),{}),unknown:!0},pointGroupColors:{...c.categories.reduce((g,f,C)=>({...g,[f]:p(C)}),{}),unknown:xe},eventIdToGroup:pe({points:s.points,coloringStrategy:s.coloringStrategy,pointsData:s.pointData??{},dimension:o,dimensionMetadata:c})})}else if(c.interval!==null){const d=At(c.interval);i({pointGroupVisibility:{...d.reduce((u,p)=>({...u,[p.name]:!0}),{}),unknown:!0},pointGroupColors:{...d.reduce((u,p,g)=>({...u,[p.name]:kr(g)}),{}),unknown:xe},eventIdToGroup:pe({points:s.points,coloringStrategy:s.coloringStrategy,pointsData:s.pointData??{},dimension:o,dimensionMetadata:c})})}}},setDimensionMetadata:o=>i({dimensionMetadata:o}),setUMAPParameters:o=>i({umapParameters:o}),setHDBSCANParameters:async o=>{const s=r();i({hdbscanParameters:o,clustersLoading:!0});const c=await Ir({metric:s.metric,points:s.points,hdbscanParameters:o});s.setClusters(c)},getHDSCANParameters:()=>r().hdbscanParameters,getMetric:()=>r().metric,setErrorMessage:o=>i({errorMessage:o}),setLoading:o=>i({loading:o}),setMetric:async o=>{const s=r();i({metric:o,clustersLoading:!0});const c=await Ar({metric:o,clusters:s.clusters,hdbscanParameters:s.hdbscanParameters});s.setClusters(c)},setSelectionSearchText:o=>i({selectionSearchText:o})});return Be()($e(a))},Tn=new Intl.NumberFormat([],{maximumFractionDigits:2});function xr({min:n,max:t}){return`${Tn.format(n)} - ${Tn.format(t)}`}function At({min:n,max:t}){const i=(t-n)/l1,r=[];for(let o=0;o<l1;o++){const s=n+o*i,c=n+(o+1)*i;r.push({min:s,max:c,name:xr({min:s,max:c})})}return r}function A1({numericGroupIntervals:n,numericValue:t}){let a=Fe,i=n.findIndex(r=>t>=r.min&&t<r.max);return i=i===-1?l1-1:i,a=n[i].name,a}function pe(n){const{points:t,coloringStrategy:a,pointsData:i,dimension:r,dimensionMetadata:o}=n,s={},c=t.map(d=>d.eventId);switch(a){case z.inferences:{const{primaryEventIds:d,referenceEventIds:u,corpusEventIds:p}=tn(c);d.forEach(g=>{s[g]=E.primary}),u.forEach(g=>{s[g]=E.reference}),p.forEach(g=>{s[g]=E.corpus});break}case z.correctness:{t.forEach(d=>{let u=H.unknown;const{predictionLabel:p,actualLabel:g}=d.eventMetadata;p!==null&&g!==null&&(u=p===g?H.correct:H.incorrect),s[d.eventId]=u});break}case z.dimension:{let d;o&&(o==null?void 0:o.interval)!==null&&(d=At(o.interval));const u=(r==null?void 0:r.type)==="prediction"&&(r==null?void 0:r.dataType)==="categorical",p=(r==null?void 0:r.type)==="prediction"&&(r==null?void 0:r.dataType)==="numeric",g=(r==null?void 0:r.type)==="actual"&&(r==null?void 0:r.dataType)==="categorical",f=(r==null?void 0:r.type)==="actual"&&(r==null?void 0:r.dataType)==="numeric";t.forEach(C=>{let b=Fe;const k=i[C.eventId];if(r!=null&&k!=null)if(u)b=k.eventMetadata.predictionLabel??Fe;else if(p){if(d==null)throw new Error("Cannot color by prediction score without numeric group intervals");const S=k.eventMetadata.predictionScore;typeof S=="number"&&(b=A1({numericGroupIntervals:d,numericValue:S}))}else if(f){if(d==null)throw new Error("Cannot color by actual score without numeric group intervals");const S=k.eventMetadata.actualScore;typeof S=="number"&&(b=A1({numericGroupIntervals:d,numericValue:S}))}else if(g)b=k.eventMetadata.actualLabel??Fe;else{const S=k.dimensions.find(K=>K.dimension.name===r.name);if(S!=null&&r.dataType==="categorical")b=S.value??Fe;else if(S!=null&&r.dataType==="numeric"&&d!=null){const K=typeof(S==null?void 0:S.value)=="string"?parseFloat(S.value):null;typeof K=="number"&&(b=A1({numericGroupIntervals:d,numericValue:K}))}}s[C.eventId]=b});break}default:D()}return s}async function Mr(n){const t=await N.fetchQuery(qe,Ct,{id:n.id,getDimensionMinMax:n.dataType==="numeric",getDimensionCategories:n.dataType==="categorical"}).toPromise(),a=t==null?void 0:t.dimension;if(!n)throw new Error("Dimension not found");let i=null;return typeof(a==null?void 0:a.min)=="number"&&typeof(a==null?void 0:a.max)=="number"&&(i={min:a.min,max:a.max}),{interval:i,categories:(a==null?void 0:a.categories)??null}}async function Tr(n){var u,p,g,f,C,b;const{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}=tn([...n]),r=await N.fetchQuery(qe,ft,{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}).toPromise(),o=((p=(u=r==null?void 0:r.model)==null?void 0:u.primaryInferences)==null?void 0:p.events)??[],s=((f=(g=r==null?void 0:r.model)==null?void 0:g.referenceInferences)==null?void 0:f.events)??[],c=((b=(C=r==null?void 0:r.model)==null?void 0:C.corpusInferences)==null?void 0:b.events)??[];return[...o,...s,...c].reduce((k,P)=>(k[P.id]=P,k),{})}async function Ir({metric:n,points:t,hdbscanParameters:a}){const i=await N.fetchQuery(qe,gt,{eventIds:t.map(r=>r.eventId),coordinates:t.map(r=>({x:r.position[0],y:r.position[1],z:r.position[2]})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(i==null?void 0:i.hdbscanClustering)??[]}async function Ar({metric:n,clusters:t,hdbscanParameters:a}){const i=await N.fetchQuery(qe,pt,{clusters:t.map(r=>({id:r.id,eventIds:r.eventIds})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(i==null?void 0:i.clusters)??[]}const z1=n=>(t,a)=>{const{dir:i,column:r}=n,o=i==="asc",s=t[r],c=a[r];return s==null?1:c==null?-1:s>c?o?1:-1:s<c?o?-1:1:0};function In(n){let t=n.driftRatio,a=null;return n.dataQualityMetric?(t=n.dataQualityMetric.primaryValue,a=n.dataQualityMetric.referenceValue):n.performanceMetric?(t=n.performanceMetric.primaryValue,a=n.performanceMetric.referenceValue):n.primaryToCorpusRatio!=null&&(t=(n.primaryToCorpusRatio+1)/2*100),{...n,size:n.eventIds.length,primaryMetricValue:t,referenceMetricValue:a}}const Ac=n=>{const t=a=>({...n,columnVisibility:{metadata:!1},annotationColumnVisibility:{},setColumnVisibility:i=>{a({columnVisibility:i})},setAnnotationColumnVisibility:i=>{a({annotationColumnVisibility:i})}});return Be()($e(t))},se={NONE:"NONE",FString:"F_STRING",Mustache:"MUSTACHE"},zc={OPENAI:"OpenAI",AZURE_OPENAI:"Azure OpenAI",ANTHROPIC:"Anthropic",GEMINI:"Gemini"},zt="OPENAI",zr="gpt-4o",Er="user",Ec=["2024-10-01-preview","2024-09-01-preview","2024-08-01-preview","2024-07-01-preview","2024-06-01","2024-05-01-preview","2024-04-01-preview","2024-03-01-preview","2024-02-15-preview","2024-02-01","2023-10-01-preview","2023-09-01-preview","2023-08-01-preview","2023-07-01-preview","2023-06-01-preview","2023-05-15","2023-03-15-preview"],Et=({parser:n,text:t})=>{const a=n.parse(t),i=[],r=a.cursor();do r.name==="Variable"&&i.push(t.slice(r.node.from,r.node.to));while(r.next());return i},Vt=({parser:n,text:t,variables:a,postFormat:i})=>{if(!t)return"";let r=t,o=n.parse(r),s=o.cursor();do if(s.name==="Variable"){const c=r.slice(s.node.from,s.node.to),d=s.node.parent;c in a&&(r=`${r.slice(0,d.from)}${a[c]}${r.slice(d.to)}`,o=n.parse(r),s=o.cursor())}while(s.next());return i&&(r=i(r)),r},Vr=Un.deserialize({version:14,states:"!WQQOPOOOcOQO'#C^OOOO'#Cb'#CbQQOPOOOOOO'#Cc'#CcOhOQO,58xOOOO-E6`-E6`OOOO-E6a-E6aOOOO1G.d1G.d",stateData:"v~ORPOXQOYQOZQO[QO~OSSO~OSSOTWO~OZRX[X~",goto:"iWPPXPPP]cTQORQRORURQTPRVT",nodeNames:"⚠ FStringTemplate Template LBrace Variable RBrace",maxTerm:12,skippedNodes:[0],repeatNodeCount:2,tokenData:"%[~RaXY!WYZ!W]^!Wpq!Wqr!Wrs!]sw!Wwx!bx#O!W#O#P!i#P#o!W#o#p$c#p#q!W#q#r$|#r;'S!W;'S;=`%U<%lO!W~!]OX~~!bO[~~!iOX~[~~!lYrs!W!P!Q!W#O#P!W#U#V!W#Y#Z!W#b#c!W#f#g!W#h#i!W#i#j#[#o#p$^~#_R!Q![#h!c!i#h#T#Z#h~#kR!Q![#t!c!i#t#T#Z#t~#wR!Q![$Q!c!i$Q#T#Z$Q~$TR!Q![!W!c!i!W#T#Z!W~$cOZ~~$jQR~X~#o#p$p#q#r$w~$wOZ~[~~$|OY~~%RPX~#q#r!]~%XP;=`<%l!W",tokenizers:[1,new jn("!p~RVO#Oh#O#P!P#P#qh#q#r!j#r;'Sh;'S;=`y<%lOh~mSS~O#qh#r;'Sh;'S;=`y<%lOh~|P;=`<%lh~!UTS~O#qh#q#r!e#r;'Sh;'S;=`y<%lOh~!jOS~~!oOT~~",77)],topRules:{FStringTemplate:[0,1]},tokenPrec:32}),rn=ct.define({parser:Vr.configure({props:[Qn({"Template/LBrace":oe.quote,"Template/RBrace":oe.quote,"Template/Variable":oe.variableName,"⚠":oe.invalid})]}),languageData:{}}),Dr=({text:n,variables:t})=>Vt({parser:rn.parser,text:n,variables:t,postFormat:a=>a.replaceAll("\\{","{").replaceAll("{{","{").replaceAll("}}","}")}),Pr=n=>Et({parser:rn.parser,text:n});function Or(){return new dt(rn)}const _r=Un.deserialize({version:14,states:"!WQQOPOOOcOQO'#C^OOOO'#Cb'#CbQQOPOOOOOO'#Cc'#CcOhOQO,58xOOOO-E6`-E6`OOOO-E6a-E6aOOOO1G.d1G.d",stateData:"v~ORPOXQOYQOZQO[QO~OSSO~OSSOTWO~OZRX[X~",goto:"iWPPXPPP]cTQORQRORURQTPRVT",nodeNames:"⚠ MustacheLikeTemplate Template LBrace Variable RBrace",maxTerm:12,skippedNodes:[0],repeatNodeCount:2,tokenData:"%W~RaXY!WYZ!W]^!Wpq!Wqr!Wrs!]sw!Wwx!bx#O!W#O#P!i#P#o!W#o#p$c#p#q!W#q#r!b#r;'S!W;'S;=`%Q<%lO!W~!]OX~~!bO[~~!iOX~[~~!lYrs!W!P!Q!W#O#P!W#U#V!W#Y#Z!W#b#c!W#f#g!W#h#i!W#i#j#[#o#p$^~#_R!Q![#h!c!i#h#T#Z#h~#kR!Q![#t!c!i#t#T#Z#t~#wR!Q![$Q!c!i$Q#T#Z$Q~$TR!Q![!W!c!i!W#T#Z!W~$cOZ~~$jPX~[~#o#p$m~$rPR~#q#r$u~$xP#q#r${~%QOY~~%TP;=`<%l!W",tokenizers:[1,new jn("#e~RVO#oh#o#p!P#p#qh#q#r#X#r;'Sh;'S;=`y<%lOh~mSS~O#qh#r;'Sh;'S;=`y<%lOh~|P;=`<%lh~!USS~O#q!b#r;'S!b;'S;=`#R<%lO!b~!gVS~O#O!b#O#P!b#P#q!b#q#r!|#r;'S!b;'S;=`#R<%lO!b~#ROS~~#UP;=`<%l!b~#[P#q#r#_~#dOT~~",112)],topRules:{MustacheLikeTemplate:[0,1]},tokenPrec:32}),on=ct.define({parser:_r.configure({props:[Qn({"Template/LBrace":oe.quote,"Template/RBrace":oe.quote,"Template/Variable":oe.variableName,"Template/⚠":oe.invalid})]}),languageData:{}}),Fr=({text:n,variables:t})=>Vt({parser:on.parser,text:n,variables:t,postFormat:a=>a.replaceAll("\\{{","{{")}),Nr=n=>Et({parser:on.parser,text:n});function Rr(){return new dt(on)}const Vc=n=>{switch(n){case se.FString:return{format:Dr,extractVariables:Pr};case se.Mustache:return{format:Fr,extractVariables:Nr};case se.NONE:return{format:({text:t})=>t,extractVariables:()=>[]};default:D()}},Hr=w.union([w.string(),w.number(),w.boolean(),w.null()]),s1=w.lazy(()=>w.union([Hr,w.array(s1),w.record(s1)])),An=w.object({type:w.enum(["string","number","boolean","object","array","null","integer"]).describe("The type of the parameter"),description:w.string().optional().describe("A description of the parameter"),enum:w.array(w.string()).optional().describe("The allowed values")}).passthrough().describe("A map of parameter names to their definitions"),Dt=w.object({type:w.literal("object"),properties:w.record(w.union([An,w.object({anyOf:w.array(An)}).describe("A list of possible parameter names to their definitions")])),required:w.array(w.string()).optional().describe("The required parameters"),additionalProperties:w.boolean().optional().describe("Whether or not additional properties are allowed in the schema")}).passthrough(),b1=w.object({type:w.literal("function").describe("The type of the tool"),function:w.object({name:w.string().describe("The name of the function"),description:w.string().optional().describe("A description of the function"),parameters:Dt.extend({strict:w.boolean().optional().describe("Whether or not the arguments should exactly match the function definition, only supported for OpenAI models")}).describe("The parameters that the function accepts")}).passthrough().describe("The function definition")}).passthrough(),Dc=u1(b1,{removeAdditionalStrategy:"passthrough"}),L1=w.object({name:w.string(),description:w.string(),input_schema:Dt}),Pc=u1(L1,{removeAdditionalStrategy:"passthrough"}),Kr=L1.transform(n=>({type:"function",function:{name:n.name,description:n.description,parameters:n.input_schema}})),Br=b1.transform(n=>({name:n.function.name,description:n.function.description??n.function.name,input_schema:n.function.parameters})),Oc=w.union([b1,L1,s1]),$r=n=>{const{success:t,data:a}=b1.safeParse(n);if(t)return{provider:"OPENAI",validatedToolDefinition:a};const{success:i,data:r}=L1.safeParse(n);return i?{provider:"ANTHROPIC",validatedToolDefinition:r}:{provider:"UNKNOWN",validatedToolDefinition:null}},zn=n=>{const{provider:t,validatedToolDefinition:a}=$r(n);switch(t){case"AZURE_OPENAI":case"OPENAI":return a;case"ANTHROPIC":return Kr.parse(a);case"UNKNOWN":return null;default:D()}},Zr=({toolDefinition:n,targetProvider:t})=>{switch(t){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return Br.parse(n);case"GEMINI":return n;default:D()}};function _c(n){return{type:"function",function:{name:`new_function_${n}`,description:"",parameters:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}}function Fc(n){return{name:`new_function_${n}`,description:"",input_schema:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}const v1=w.object({id:w.string().describe("The ID of the tool call"),function:w.object({name:w.string().describe("The name of the function"),arguments:w.record(w.unknown()).describe("The arguments for the function")}).describe("The function that is being called").passthrough()}),Gr=w.array(v1),Nc=u1(Gr,{removeAdditionalStrategy:"passthrough"}),y1=w.object({id:w.string().describe("The ID of the tool call"),type:w.literal("tool_use"),name:w.string().describe("The name of the tool"),input:w.record(w.unknown()).describe("The input for the tool")}).passthrough(),Wr=w.array(y1),Rc=u1(Wr,{removeAdditionalStrategy:"passthrough"}),Ur=y1.transform(n=>({id:n.id,function:{name:n.name,arguments:n.input}})),jr=v1.transform(n=>({id:n.id,type:"tool_use",name:n.function.name,input:typeof n.function.arguments=="string"?{[n.function.arguments]:n.function.arguments}:n.function.arguments??{}})),Qr=w.union([v1,y1,s1]),Hc=w.array(Qr),qr=n=>{const{success:t,data:a}=v1.safeParse(n);if(t)return{provider:"OPENAI",validatedToolCall:a};const{success:i,data:r}=y1.safeParse(n);return i?{provider:"ANTHROPIC",validatedToolCall:r}:{provider:"UNKNOWN",validatedToolCall:null}},En=n=>{const{provider:t,validatedToolCall:a}=qr(n);switch(t){case"AZURE_OPENAI":case"OPENAI":return a;case"ANTHROPIC":return Ur.parse(a);case"UNKNOWN":return null;default:D()}},Xr=({toolCall:n,targetProvider:t})=>{switch(t){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return jr.parse(n);case"GEMINI":return n;default:D()}};function Kc(){return{id:"",function:{name:"",arguments:{}}}}function Bc(){return{id:"",type:"tool_use",name:"",input:{}}}function Yr({str:n,excludePrimitives:t=!1,excludeArray:a=!1}){try{const i=JSON.parse(n);if(t&&typeof i!="object"||a&&Array.isArray(i))return!1}catch{return!1}return!0}function Jr(n){return Yr({str:n,excludeArray:!0,excludePrimitives:!0})}function $c(n){try{return{json:JSON.parse(n)}}catch(t){return{json:null,parseError:t}}}function Zc(...n){try{return{json:JSON.stringify(...n)}}catch(t){return{json:null,stringifyError:t}}}const e2=({instanceTools:n,provider:t})=>n.map(a=>{switch(t){case"OPENAI":case"AZURE_OPENAI":{const i=zn(a.definition);return{...a,definition:i??a.definition}}case"ANTHROPIC":{const i=zn(a.definition),r=i?Zr({toolDefinition:i,targetProvider:t}):a.definition;return{...a,definition:r}}case"GEMINI":return a;default:D()}}),n2=({toolCalls:n,provider:t})=>{if(n!=null)return n.map(a=>{switch(t){case"OPENAI":case"AZURE_OPENAI":return En(a)??a;case"ANTHROPIC":{const i=En(a);return i!=null?Xr({toolCall:i,targetProvider:t}):a}case"GEMINI":return a;default:D()}})};let t2=0,a2=0,i2=1,r2=0;const Pt=()=>t2++,Vn=()=>i2++,Gc=()=>r2++,o2=()=>a2++,Ot=()=>({__type:"chat",messages:[{id:Vn(),role:"system",content:"You are a chatbot"},{id:Vn(),role:"user",content:"{{question}}"}]}),l2={__type:"text_completion",prompt:"{{question}}"};function s2(){return{id:Pt(),template:Ot(),model:{provider:zt,modelName:zr,invocationParameters:[],supportedInvocationParameters:[]},tools:[],toolChoice:"auto",output:void 0,spanId:null,activeRunId:null}}function Wc(){return{type:"json_schema",json_schema:{name:"response",schema:{type:"object",properties:{},required:[],additionalProperties:!1},strict:!0}}}function c2(n){if(n.instances!=null&&n.instances.length>0)return n.instances;const t=s2(),a=Object.values(n.modelConfigByProvider);if(!(a.length>0))return[t];const r=a.find(o=>o.provider===zt)??a[0];return t.model={...t.model,...r},[t]}const Uc=n=>Be($e((a,i)=>({streaming:!0,operationType:"chat",inputMode:"manual",input:{variablesValueCache:{}},templateLanguage:se.Mustache,instances:c2(n),setInput:r=>{a({input:r})},setOperationType:r=>{a(r==="chat"?{instances:i().instances.map(o=>({...o,template:Ot()}))}:{instances:i().instances.map(o=>({...o,template:l2}))}),a({operationType:r})},addInstance:()=>{const r=i().instances,o=i().instances[0];o&&a({instances:[...r,{...o,id:Pt(),activeRunId:null,experimentId:null,spanId:null}]})},updateModelSupportedInvocationParameters:({instanceId:r,supportedInvocationParameters:o})=>{const s=i().instances;a({instances:s.map(c=>c.id===r?{...c,model:{...c.model,supportedInvocationParameters:o,invocationParameters:Mi(c.model.invocationParameters,o)},tools:o.find(d=>d.canonicalName===Ti)?c.tools:[]}:c)})},updateProvider:({instanceId:r,provider:o,modelConfigByProvider:s})=>{const c=i().instances,d=c.find(g=>g.id===r);if(!d||d.model.provider===o)return;const u=s[o],p={model:u?{...u,supportedInvocationParameters:[],provider:o}:{modelName:null,baseUrl:null,invocationParameters:[],supportedInvocationParameters:[],apiVersion:null,endpoint:null,provider:o},tools:e2({instanceTools:d.tools,provider:o})};d.template.__type==="chat"&&(p.template={__type:"chat",messages:d.template.messages.map(g=>({...g,toolCalls:n2({toolCalls:g.toolCalls,provider:o})}))}),a({instances:c.map(g=>g.id===r?{...g,...p}:g)})},updateModel:({instanceId:r,patch:o})=>{const s=i().instances;s.find(d=>d.id===r)&&a({instances:s.map(d=>d.id===r?{...d,model:{...d.model,...o}}:d)})},deleteInstance:r=>{const o=i().instances;a({instances:o.filter(s=>s.id!==r)})},addMessage:({playgroundInstanceId:r})=>{const o=i().instances;a({instances:o.map(s=>s.id===r&&(s!=null&&s.template)&&(s==null?void 0:s.template.__type)==="chat"?{...s,messages:[...s.template.messages,{role:Er,content:"{question}"}]}:s)})},updateInstance:({instanceId:r,patch:o})=>{const s=i().instances;a({instances:s.map(c=>c.id===r?{...c,...o}:c)})},runPlaygroundInstances:()=>{const r=i().instances;a({instances:r.map(o=>({...o,activeRunId:o2(),spanId:null}))})},cancelPlaygroundInstances:()=>{a({instances:i().instances.map(r=>({...r,activeRunId:null,spanId:null}))})},markPlaygroundInstanceComplete:r=>{const o=i().instances;a({instances:o.map(s=>s.id===r?{...s,activeRunId:null}:s)})},setTemplateLanguage:r=>{a({templateLanguage:r})},setVariableValue:(r,o)=>{const s=i().input;a({input:{...s,variablesValueCache:{...s.variablesValueCache,[r]:o}}})},setStreaming:r=>{a({streaming:r})},updateInstanceModelInvocationParameters:({instanceId:r,invocationParameters:o})=>{i().instances.find(c=>c.id===r)&&a({instances:i().instances.map(c=>c.id===r?{...c,model:{...c.model,invocationParameters:o}}:c)})},upsertInvocationParameterInput:({instanceId:r,invocationParameterInput:o})=>{const s=i().instances.find(d=>d.id===r);if(!s)return;const c=s.model.invocationParameters.find(d=>fn(d,o));a(c?{instances:i().instances.map(d=>d.id===r?{...d,model:{...d.model,invocationParameters:d.model.invocationParameters.map(u=>fn(u,o)?o:u)}}:d)}:{instances:i().instances.map(d=>d.id===r?{...d,model:{...d.model,invocationParameters:[...d.model.invocationParameters,o]}}:d)})},deleteInvocationParameterInput:({instanceId:r,invocationParameterInputInvocationName:o})=>{i().instances.find(c=>c.id===r)&&a({instances:i().instances.map(c=>c.id===r?{...c,model:{...c.model,invocationParameters:c.model.invocationParameters.filter(d=>d.invocationName!==o)}}:c)})},...n}))),jc=n=>{const t=a=>({setCredential:({provider:i,value:r})=>{a({[i]:r})},...n});return Be()(qn($e(t),{name:"arize-phoenix-credentials"}))};function _t(n){return e("div",{onClick:t=>t.stopPropagation(),css:m`
|
|
147
|
+
`}}}();Ct.hash="e8fa488a0d466b5e40fdadc1e5227a57";const qi=30,bn=5,Ln=100,Xi=0,vn=0,yn=.99,Yi=500,wn=300,kn=1e5,Ji=10,Sn=1,er=2,nr=1,tr=0;var z=(n=>(n.inferences="inferences",n.correctness="correctness",n.dimension="dimension",n))(z||{}),Ae=(n=>(n.list="list",n.gallery="gallery",n))(Ae||{}),Ie=(n=>(n.small="small",n.medium="medium",n.large="large",n))(Ie||{}),E=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(E||{}),H=(n=>(n.correct="correct",n.incorrect="incorrect",n.unknown="unknown",n))(H||{});const ar=["#05fbff","#cb8afd"],ir=["#00add0","#4500d9"],le="#a5a5a5",xe=le;var ee=(n=>(n.primary="primary",n.reference="reference",n.corpus="corpus",n))(ee||{});function D(n){throw new Error("Unreachable")}function X1(n){return typeof n=="number"||n===null}function rr(n){return typeof n=="string"||n===null}function hc(n){return Array.isArray(n)?n.every(t=>typeof t=="string"):!1}function Y1(n){return typeof n=="object"&&n!==null}function pc(n){return Y1(n)&&Object.keys(n).every(t=>typeof t=="string")}const gc=()=>n=>n,J1=h.createContext(null);function f1(){const n=G.useContext(J1);if(n===null)throw new Error("useInferences must be used within a InferencesProvider");return n}function fc(n){return e(J1.Provider,{value:{primaryInferences:n.primaryInferences,referenceInferences:n.referenceInferences,corpusInferences:n.corpusInferences,getInferencesNameByRole:t=>{var a,i;switch(t){case ee.primary:return n.primaryInferences.name;case ee.reference:return((a=n.referenceInferences)==null?void 0:a.name)??"reference";case ee.corpus:return((i=n.corpusInferences)==null?void 0:i.name)??"corpus";default:D()}}},children:n.children})}const en=h.createContext(null);function Cc({children:n,...t}){const[a]=h.useState(()=>Sr(t));return e(en.Provider,{value:a,children:n})}function y(n,t){const a=h.useContext(en);if(!a)throw new Error("Missing PointCloudContext.Provider in the tree");return Wn(a,n,t)}var X=(n=>(n.last_hour="Last Hour",n.last_day="Last Day",n.last_week="Last Week",n.last_month="Last Month",n.last_3_months="Last 3 Months",n.first_hour="First Hour",n.first_day="First Day",n.first_week="First Week",n.first_month="First Month",n.all="All",n))(X||{});const bt=h.createContext(null);function or(){const n=h.useContext(bt);if(n===null)throw new Error("useTimeRange must be used within a TimeRangeProvider");return n}function lr(n,t){return h.useMemo(()=>{switch(n){case"Last Hour":{const i=we(Fa(t.end),{roundingMethod:"ceil"});return{start:R1(i,1),end:i}}case"Last Day":{const i=we(_a(t.end),{roundingMethod:"ceil"});return{start:ge(i,1),end:i}}case"Last Week":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,7),end:i}}case"Last Month":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,30),end:i}}case"Last 3 Months":{const i=we(Xe(t.end),{roundingMethod:"ceil"});return{start:ge(i,90),end:i}}case"First Hour":{const i=N1(t.start);return{start:i,end:Oa(i,1)}}case"First Day":{const i=ke(t.start);return{start:i,end:e1(i,1)}}case"First Week":{const i=T1(t.start);return{start:i,end:e1(i,7)}}case"First Month":{const i=T1(t.start);return{start:i,end:e1(i,30)}}case"All":{const i=we(Xe(t.end),{roundingMethod:"floor"});return{start:T1(t.start),end:i}}default:D()}},[n,t])}function bc(n){const[t,a]=h.useState("Last Month"),i=lr(t,n.timeRangeBounds),r=h.useCallback(o=>{h.startTransition(()=>{a(o)})},[]);return e(bt.Provider,{value:{timeRange:i,timePreset:t,setTimePreset:r},children:n.children})}const Lt=h.createContext(null);function Lc({children:n}){const[t,a]=Ai({style:{zIndex:1e3}}),i=h.useCallback(o=>{t({variant:"danger",...o})},[t]),r=h.useCallback(o=>{t({variant:"success",...o})},[t]);return l(Lt.Provider,{value:{notify:t,notifyError:i,notifySuccess:r},children:[n,a]})}function vt(){const n=h.useContext(Lt);if(n===null)throw new Error("useGlobalNotification must be used within a NotificationProvider");return n}function vc(){return vt().notifyError}function C1(){return vt().notifySuccess}const yt="arize-phoenix-theme";function wt(){return localStorage.getItem(yt)==="light"?"light":"dark"}const nn=h.createContext(null);function Q(){const n=h.useContext(nn);if(n===null)throw new Error("useTheme must be used within a ThemeProvider");return n}function yc(n){const[t,a]=h.useState(wt()),i=h.useCallback(r=>{localStorage.setItem(yt,r),a(r)},[]);return e(nn.Provider,{value:{theme:t,setTheme:i},children:n.children})}function sr(n){return n.endsWith("/")?n.slice(0,-1):n}const kt=sr(window.Config.basename),cr=window.location.protocol==="https:",Qe=`${window.location.protocol}//${window.location.host}${kt}`,dr=`${cr?"wss":"ws"}://${window.location.host}${kt}`,wc=window.Config.platformVersion,Re="returnUrl";function xn(n,t){const a=new URL(n,window.location.origin);return t.forEach((i,r)=>{a.searchParams.append(r,i)}),a.pathname+a.search}function ur(){const n=window.Config.basename,t=n==null||n===""||n==="/",a=n!=null&&n.startsWith("/")&&!n.endsWith("/");if(!(t||a))throw new Error(`Invalid basename: ${n}`);const i=window.location.pathname,r=window.location.origin,o=new URLSearchParams(window.location.search);if(t){const s=new URL("/login",r);return s.searchParams.set(Re,xn(i,o)),s.pathname+s.search}if(i.startsWith(n)){const s=i.slice(n.length);if(s===""||s.startsWith("/")){const d=new URL(n+"/login",r);return d.searchParams.set(Re,xn(s,o)),d.pathname+d.search}}return n+"/login"}function kc(n){const t=window.Config.basename,a=t==null||t===""||t==="/",i=t!=null&&t.startsWith("/")&&!t.endsWith("/");if(!(a||i))throw new Error(`Invalid basename: ${t}`);return a?n:t+n}const Sc=({path:n,searchParams:t})=>{const i=new URL(window.location.href).searchParams.get(Re),r=new URLSearchParams(t||{});i&&r.set(Re,i);const o=r.toString();return`${n}${o?`?${o}`:""}`},mr=n=>!(typeof n!="string"||!n.startsWith("/")||n.replace(/\\/g,"/").startsWith("//")),hr=n=>mr(n)?n:"/",xc=()=>{const n=new URL(window.location.href);return hr(n.searchParams.get(Re))},pr=Qe+"/auth/refresh";class Mn extends Error{constructor(){super("Unauthorized")}}async function gr(n,t){try{return await fetch(n,t).then(a=>{if(a.status===401)throw new Mn;return a})}catch(a){if(a instanceof Mn)return await St(),fetch(n,t);if(a instanceof Error&&a.name==="AbortError")throw a}throw new Error("An unexpected error occurred while fetching data")}let Oe=null;async function St(){return Oe||(Oe=fetch(pr,{method:"POST"}).then(n=>(n.ok||(window.location.href=ur()),Oe=null,n)),Oe)}const fr=Qe+"/graphql",xt=window.Config.authenticationEnabled,Cr=xt?gr:fetch;function br(n,t,a){return Se.Observable.create(i=>{const r=new AbortController;return Cr(n,{...t,signal:r.signal}).then(o=>o.json()).then(o=>{const s=a==null?void 0:a(o);if(s)throw s;i.next(o),i.complete()}).catch(o=>{o.name==="AbortError"?i.complete():i.error(o)}),()=>{r.abort()}})}const Lr=(n,t,a)=>br(fr,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:n.text,variables:t})},i=>{if(!(!Y1(i)||!("errors"in i))&&Array.isArray(i.errors))return new Error(`Error fetching GraphQL query '${n.name}' with variables '${JSON.stringify(t)}': ${JSON.stringify(i.errors)}`)}),vr=Na({url:`${dr}/graphql`,shouldRetry:n=>xt&&n instanceof Event&&n.type==="error"?(St(),!0):!1}),yr=(n,t)=>Se.Observable.create(a=>vr.subscribe({operationName:n.name,query:n.text,variables:t},a)),qe=new Se.Environment({network:Se.Network.create(Lr,yr),store:new Se.Store(new Se.RecordSource,{gcReleaseBufferSize:10})});function Mt(n){return n.includes("PRIMARY")?ee.primary:n.includes("CORPUS")?ee.corpus:ee.reference}function tn(n){const t=[],a=[],i=[];return n.forEach(r=>{const o=Mt(r);o==ee.primary?t.push(r):o==ee.corpus?i.push(r):a.push(r)}),{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}}const l1=10,Fe="unknown",Tt=Ha,It=Ra,wr=n=>It[n],kr=n=>Tt(n/l1);var ze=(n=>(n.move="move",n.select="select",n))(ze||{}),an=(n=>(n.default="default",n.highlight="highlight",n))(an||{});const Me=()=>wt()==="light"?ir:ar;function Mc(){const n=Me();return{coloringStrategy:z.inferences,pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0},pointGroupColors:{[E.primary]:n[0],[E.reference]:n[1],[E.corpus]:le},metric:{type:"drift",metric:"euclideanDistance"}}}function Tc(){const n=Me();return{coloringStrategy:z.inferences,pointGroupVisibility:{[E.primary]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:n[0],[E.corpus]:le},metric:{type:"retrieval",metric:"queryDistance"},clusterSort:{dir:"desc",column:"primaryMetricValue"}}}function Ic(){return{coloringStrategy:z.correctness,pointGroupVisibility:{[H.correct]:!0,[H.incorrect]:!0,[H.unknown]:!0},pointGroupColors:{[H.correct]:t1.Discrete2.LightBlueOrange[0],[H.incorrect]:t1.Discrete2.LightBlueOrange[1],[H.unknown]:xe},metric:{type:"performance",metric:"accuracyScore"},clusterSort:{dir:"asc",column:"primaryMetricValue"}}}const Sr=n=>{const t={loading:!1,errorMessage:null,points:[],eventIdToDataMap:new Map,clusters:[],clusterSort:{dir:"desc",column:"driftRatio"},pointData:null,selectedEventIds:new Set,hoveredEventId:null,highlightedClusterId:null,selectedClusterId:null,canvasMode:"move",pointSizeScale:1,clusterColorMode:"default",coloringStrategy:z.inferences,inferencesVisibility:{primary:!0,reference:!0,corpus:!0},pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:Me()[0],[E.reference]:Me()[1],[E.corpus]:le},eventIdToGroup:{},selectionDisplay:Ae.gallery,selectionGridSize:Ie.large,dimension:null,dimensionMetadata:null,umapParameters:{minDist:Xi,nNeighbors:qi,nSamples:Yi},hdbscanParameters:{minClusterSize:Ji,clusterMinSamples:nr,clusterSelectionEpsilon:tr},clustersLoading:!1,metric:{type:"drift",metric:"euclideanDistance"},selectionSearchText:""},a=(i,r)=>({...t,...n,setInitialData:async({points:o,clusters:s,retrievals:c})=>{const d=r(),u=new Map,p=c.reduce((C,b)=>{const{queryId:k}=b;return C[k]?C[k].push(b):C[k]=[b],C},{});o.forEach(C=>{C={...C,retrievals:p[C.eventId]??[]},u.set(C.eventId,C)});const g=s.map(In).sort(z1(d.clusterSort));i({loading:!1,points:o,eventIdToDataMap:u,clusters:g,clustersLoading:!1,selectedEventIds:new Set,selectedClusterId:null,pointData:null,eventIdToGroup:pe({points:o,coloringStrategy:d.coloringStrategy,pointsData:d.pointData??{},dimension:d.dimension||null,dimensionMetadata:d.dimensionMetadata})});const f=await Tr(o.map(C=>C.eventId)).catch(()=>i({errorMessage:"Failed to load the point events"}));f&&i({pointData:f,clusters:g,clustersLoading:!1,eventIdToGroup:pe({points:o,coloringStrategy:d.coloringStrategy,pointsData:f??{},dimension:d.dimension||null,dimensionMetadata:d.dimensionMetadata})})},setClusters:o=>{const s=r(),c=o.map(In).sort(z1(s.clusterSort));i({clusters:c,clustersLoading:!1,selectedClusterId:null,highlightedClusterId:null})},setClusterSort:o=>{const c=[...r().clusters].sort(z1(o));i({clusterSort:o,clusters:c})},setSelectedEventIds:o=>i({selectedEventIds:o,selectionSearchText:""}),setHoveredEventId:o=>i({hoveredEventId:o}),setHighlightedClusterId:o=>i({highlightedClusterId:o}),setSelectedClusterId:o=>i({selectedClusterId:o,highlightedClusterId:null}),setPointSizeScale:o=>i({pointSizeScale:o}),setCanvasMode:o=>i({canvasMode:o}),setClusterColorMode:o=>i({clusterColorMode:o}),setColoringStrategy:o=>{const s=r();switch(i({coloringStrategy:o}),o){case z.correctness:i({pointGroupVisibility:{[H.correct]:!0,[H.incorrect]:!0,[H.unknown]:!0},pointGroupColors:{[H.correct]:t1.Discrete2.LightBlueOrange[0],[H.incorrect]:t1.Discrete2.LightBlueOrange[1],[H.unknown]:xe},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break;case z.inferences:{i({pointGroupVisibility:{[E.primary]:!0,[E.reference]:!0,[E.corpus]:!0},pointGroupColors:{[E.primary]:Me()[0],[E.reference]:Me()[1],[E.corpus]:le},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break}case z.dimension:{i({pointGroupVisibility:{unknown:!0},pointGroupColors:{unknown:xe},dimension:null,dimensionMetadata:null,eventIdToGroup:pe({points:s.points,coloringStrategy:o,pointsData:s.pointData??{},dimension:s.dimension||null,dimensionMetadata:s.dimensionMetadata})});break}default:D()}},inferencesVisibility:{primary:!0,reference:!0,corpus:!0},setInferencesVisibility:o=>i({inferencesVisibility:o}),setPointGroupVisibility:o=>i({pointGroupVisibility:o}),selectionDisplay:Ae.gallery,setSelectionDisplay:o=>i({selectionDisplay:o}),setSelectionGridSize:o=>i({selectionGridSize:o}),reset:()=>{i({points:[],clusters:[],selectedEventIds:new Set,selectedClusterId:null,eventIdToGroup:{}})},setDimension:async o=>{const s=r();i({dimension:o,dimensionMetadata:null});const c=await Mr(o).catch(()=>i({errorMessage:"Failed to load the dimension metadata"}));if(c){if(i({dimensionMetadata:c}),c.categories&&c.categories.length){const d=c.categories.length,p=d<=It.length?wr:g=>Tt(g/d);i({pointGroupVisibility:{...c.categories.reduce((g,f)=>({...g,[f]:!0}),{}),unknown:!0},pointGroupColors:{...c.categories.reduce((g,f,C)=>({...g,[f]:p(C)}),{}),unknown:xe},eventIdToGroup:pe({points:s.points,coloringStrategy:s.coloringStrategy,pointsData:s.pointData??{},dimension:o,dimensionMetadata:c})})}else if(c.interval!==null){const d=At(c.interval);i({pointGroupVisibility:{...d.reduce((u,p)=>({...u,[p.name]:!0}),{}),unknown:!0},pointGroupColors:{...d.reduce((u,p,g)=>({...u,[p.name]:kr(g)}),{}),unknown:xe},eventIdToGroup:pe({points:s.points,coloringStrategy:s.coloringStrategy,pointsData:s.pointData??{},dimension:o,dimensionMetadata:c})})}}},setDimensionMetadata:o=>i({dimensionMetadata:o}),setUMAPParameters:o=>i({umapParameters:o}),setHDBSCANParameters:async o=>{const s=r();i({hdbscanParameters:o,clustersLoading:!0});const c=await Ir({metric:s.metric,points:s.points,hdbscanParameters:o});s.setClusters(c)},getHDSCANParameters:()=>r().hdbscanParameters,getMetric:()=>r().metric,setErrorMessage:o=>i({errorMessage:o}),setLoading:o=>i({loading:o}),setMetric:async o=>{const s=r();i({metric:o,clustersLoading:!0});const c=await Ar({metric:o,clusters:s.clusters,hdbscanParameters:s.hdbscanParameters});s.setClusters(c)},setSelectionSearchText:o=>i({selectionSearchText:o})});return Be()($e(a))},Tn=new Intl.NumberFormat([],{maximumFractionDigits:2});function xr({min:n,max:t}){return`${Tn.format(n)} - ${Tn.format(t)}`}function At({min:n,max:t}){const i=(t-n)/l1,r=[];for(let o=0;o<l1;o++){const s=n+o*i,c=n+(o+1)*i;r.push({min:s,max:c,name:xr({min:s,max:c})})}return r}function A1({numericGroupIntervals:n,numericValue:t}){let a=Fe,i=n.findIndex(r=>t>=r.min&&t<r.max);return i=i===-1?l1-1:i,a=n[i].name,a}function pe(n){const{points:t,coloringStrategy:a,pointsData:i,dimension:r,dimensionMetadata:o}=n,s={},c=t.map(d=>d.eventId);switch(a){case z.inferences:{const{primaryEventIds:d,referenceEventIds:u,corpusEventIds:p}=tn(c);d.forEach(g=>{s[g]=E.primary}),u.forEach(g=>{s[g]=E.reference}),p.forEach(g=>{s[g]=E.corpus});break}case z.correctness:{t.forEach(d=>{let u=H.unknown;const{predictionLabel:p,actualLabel:g}=d.eventMetadata;p!==null&&g!==null&&(u=p===g?H.correct:H.incorrect),s[d.eventId]=u});break}case z.dimension:{let d;o&&(o==null?void 0:o.interval)!==null&&(d=At(o.interval));const u=(r==null?void 0:r.type)==="prediction"&&(r==null?void 0:r.dataType)==="categorical",p=(r==null?void 0:r.type)==="prediction"&&(r==null?void 0:r.dataType)==="numeric",g=(r==null?void 0:r.type)==="actual"&&(r==null?void 0:r.dataType)==="categorical",f=(r==null?void 0:r.type)==="actual"&&(r==null?void 0:r.dataType)==="numeric";t.forEach(C=>{let b=Fe;const k=i[C.eventId];if(r!=null&&k!=null)if(u)b=k.eventMetadata.predictionLabel??Fe;else if(p){if(d==null)throw new Error("Cannot color by prediction score without numeric group intervals");const S=k.eventMetadata.predictionScore;typeof S=="number"&&(b=A1({numericGroupIntervals:d,numericValue:S}))}else if(f){if(d==null)throw new Error("Cannot color by actual score without numeric group intervals");const S=k.eventMetadata.actualScore;typeof S=="number"&&(b=A1({numericGroupIntervals:d,numericValue:S}))}else if(g)b=k.eventMetadata.actualLabel??Fe;else{const S=k.dimensions.find(K=>K.dimension.name===r.name);if(S!=null&&r.dataType==="categorical")b=S.value??Fe;else if(S!=null&&r.dataType==="numeric"&&d!=null){const K=typeof(S==null?void 0:S.value)=="string"?parseFloat(S.value):null;typeof K=="number"&&(b=A1({numericGroupIntervals:d,numericValue:K}))}}s[C.eventId]=b});break}default:D()}return s}async function Mr(n){const t=await N.fetchQuery(qe,Ct,{id:n.id,getDimensionMinMax:n.dataType==="numeric",getDimensionCategories:n.dataType==="categorical"}).toPromise(),a=t==null?void 0:t.dimension;if(!n)throw new Error("Dimension not found");let i=null;return typeof(a==null?void 0:a.min)=="number"&&typeof(a==null?void 0:a.max)=="number"&&(i={min:a.min,max:a.max}),{interval:i,categories:(a==null?void 0:a.categories)??null}}async function Tr(n){var u,p,g,f,C,b;const{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}=tn([...n]),r=await N.fetchQuery(qe,ft,{primaryEventIds:t,referenceEventIds:a,corpusEventIds:i}).toPromise(),o=((p=(u=r==null?void 0:r.model)==null?void 0:u.primaryInferences)==null?void 0:p.events)??[],s=((f=(g=r==null?void 0:r.model)==null?void 0:g.referenceInferences)==null?void 0:f.events)??[],c=((b=(C=r==null?void 0:r.model)==null?void 0:C.corpusInferences)==null?void 0:b.events)??[];return[...o,...s,...c].reduce((k,P)=>(k[P.id]=P,k),{})}async function Ir({metric:n,points:t,hdbscanParameters:a}){const i=await N.fetchQuery(qe,gt,{eventIds:t.map(r=>r.eventId),coordinates:t.map(r=>({x:r.position[0],y:r.position[1],z:r.position[2]})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(i==null?void 0:i.hdbscanClustering)??[]}async function Ar({metric:n,clusters:t,hdbscanParameters:a}){const i=await N.fetchQuery(qe,pt,{clusters:t.map(r=>({id:r.id,eventIds:r.eventIds})),fetchDataQualityMetric:n.type==="dataQuality",dataQualityMetricColumnName:n.type==="dataQuality"?n.dimension.name:null,fetchPerformanceMetric:n.type==="performance",performanceMetric:n.type==="performance"?n.metric:"accuracyScore",...a},{fetchPolicy:"network-only"}).toPromise();return(i==null?void 0:i.clusters)??[]}const z1=n=>(t,a)=>{const{dir:i,column:r}=n,o=i==="asc",s=t[r],c=a[r];return s==null?1:c==null?-1:s>c?o?1:-1:s<c?o?-1:1:0};function In(n){let t=n.driftRatio,a=null;return n.dataQualityMetric?(t=n.dataQualityMetric.primaryValue,a=n.dataQualityMetric.referenceValue):n.performanceMetric?(t=n.performanceMetric.primaryValue,a=n.performanceMetric.referenceValue):n.primaryToCorpusRatio!=null&&(t=(n.primaryToCorpusRatio+1)/2*100),{...n,size:n.eventIds.length,primaryMetricValue:t,referenceMetricValue:a}}const Ac=n=>{const t=a=>({...n,columnVisibility:{metadata:!1},annotationColumnVisibility:{},setColumnVisibility:i=>{a({columnVisibility:i})},setAnnotationColumnVisibility:i=>{a({annotationColumnVisibility:i})}});return Be()($e(t))},se={NONE:"NONE",FString:"F_STRING",Mustache:"MUSTACHE"},zc={OPENAI:"OpenAI",AZURE_OPENAI:"Azure OpenAI",ANTHROPIC:"Anthropic",GEMINI:"Gemini"},zt="OPENAI",zr="gpt-4o",Er="user",Ec=["2024-10-01-preview","2024-09-01-preview","2024-08-01-preview","2024-07-01-preview","2024-06-01","2024-05-01-preview","2024-04-01-preview","2024-03-01-preview","2024-02-15-preview","2024-02-01","2023-10-01-preview","2023-09-01-preview","2023-08-01-preview","2023-07-01-preview","2023-06-01-preview","2023-05-15","2023-03-15-preview"],Et=({parser:n,text:t})=>{const a=n.parse(t),i=[],r=a.cursor();do if(r.name==="Variable"){const o=t.slice(r.node.from,r.node.to).trim();i.push(o)}while(r.next());return i},Vt=({parser:n,text:t,variables:a,postFormat:i})=>{if(!t)return"";let r=t,o=n.parse(r),s=o.cursor();do if(s.name==="Variable"){const c=r.slice(s.node.from,s.node.to).trim(),d=s.node.parent;c in a&&(r=`${r.slice(0,d.from)}${a[c]}${r.slice(d.to)}`,o=n.parse(r),s=o.cursor())}while(s.next());return i&&(r=i(r)),r},Vr=Un.deserialize({version:14,states:"!WQQOPOOOcOQO'#C^OOOO'#Cb'#CbQQOPOOOOOO'#Cc'#CcOhOQO,58xOOOO-E6`-E6`OOOO-E6a-E6aOOOO1G.d1G.d",stateData:"v~ORPOXQOYQOZQO[QO~OSSO~OSSOTWO~OZRX[X~",goto:"iWPPXPPP]cTQORQRORURQTPRVT",nodeNames:"⚠ FStringTemplate Template LBrace Variable RBrace",maxTerm:12,skippedNodes:[0],repeatNodeCount:2,tokenData:"%[~RaXY!WYZ!W]^!Wpq!Wqr!Wrs!]sw!Wwx!bx#O!W#O#P!i#P#o!W#o#p$c#p#q!W#q#r$|#r;'S!W;'S;=`%U<%lO!W~!]OX~~!bO[~~!iOX~[~~!lYrs!W!P!Q!W#O#P!W#U#V!W#Y#Z!W#b#c!W#f#g!W#h#i!W#i#j#[#o#p$^~#_R!Q![#h!c!i#h#T#Z#h~#kR!Q![#t!c!i#t#T#Z#t~#wR!Q![$Q!c!i$Q#T#Z$Q~$TR!Q![!W!c!i!W#T#Z!W~$cOZ~~$jQR~X~#o#p$p#q#r$w~$wOZ~[~~$|OY~~%RPX~#q#r!]~%XP;=`<%l!W",tokenizers:[1,new jn("!p~RVO#Oh#O#P!P#P#qh#q#r!j#r;'Sh;'S;=`y<%lOh~mSS~O#qh#r;'Sh;'S;=`y<%lOh~|P;=`<%lh~!UTS~O#qh#q#r!e#r;'Sh;'S;=`y<%lOh~!jOS~~!oOT~~",77)],topRules:{FStringTemplate:[0,1]},tokenPrec:32}),rn=ct.define({parser:Vr.configure({props:[Qn({"Template/LBrace":oe.quote,"Template/RBrace":oe.quote,"Template/Variable":oe.variableName,"⚠":oe.invalid})]}),languageData:{}}),Dr=({text:n,variables:t})=>Vt({parser:rn.parser,text:n,variables:t,postFormat:a=>a.replaceAll("\\{","{").replaceAll("{{","{").replaceAll("}}","}")}),Pr=n=>Et({parser:rn.parser,text:n});function Or(){return new dt(rn)}const _r=Un.deserialize({version:14,states:"!WQQOPOOOcOQO'#C^OOOO'#Cb'#CbQQOPOOOOOO'#Cc'#CcOhOQO,58xOOOO-E6`-E6`OOOO-E6a-E6aOOOO1G.d1G.d",stateData:"v~ORPOXQOYQOZQO[QO~OSSO~OSSOTWO~OZRX[X~",goto:"iWPPXPPP]cTQORQRORURQTPRVT",nodeNames:"⚠ MustacheLikeTemplate Template LBrace Variable RBrace",maxTerm:12,skippedNodes:[0],repeatNodeCount:2,tokenData:"%W~RaXY!WYZ!W]^!Wpq!Wqr!Wrs!]sw!Wwx!bx#O!W#O#P!i#P#o!W#o#p$c#p#q!W#q#r!b#r;'S!W;'S;=`%Q<%lO!W~!]OX~~!bO[~~!iOX~[~~!lYrs!W!P!Q!W#O#P!W#U#V!W#Y#Z!W#b#c!W#f#g!W#h#i!W#i#j#[#o#p$^~#_R!Q![#h!c!i#h#T#Z#h~#kR!Q![#t!c!i#t#T#Z#t~#wR!Q![$Q!c!i$Q#T#Z$Q~$TR!Q![!W!c!i!W#T#Z!W~$cOZ~~$jPX~[~#o#p$m~$rPR~#q#r$u~$xP#q#r${~%QOY~~%TP;=`<%l!W",tokenizers:[1,new jn("#e~RVO#oh#o#p!P#p#qh#q#r#X#r;'Sh;'S;=`y<%lOh~mSS~O#qh#r;'Sh;'S;=`y<%lOh~|P;=`<%lh~!USS~O#q!b#r;'S!b;'S;=`#R<%lO!b~!gVS~O#O!b#O#P!b#P#q!b#q#r!|#r;'S!b;'S;=`#R<%lO!b~#ROS~~#UP;=`<%l!b~#[P#q#r#_~#dOT~~",112)],topRules:{MustacheLikeTemplate:[0,1]},tokenPrec:32}),on=ct.define({parser:_r.configure({props:[Qn({"Template/LBrace":oe.quote,"Template/RBrace":oe.quote,"Template/Variable":oe.variableName,"Template/⚠":oe.invalid})]}),languageData:{}}),Fr=({text:n,variables:t})=>Vt({parser:on.parser,text:n,variables:t,postFormat:a=>a.replaceAll("\\{{","{{")}),Nr=n=>Et({parser:on.parser,text:n});function Rr(){return new dt(on)}const Vc=n=>{switch(n){case se.FString:return{format:Dr,extractVariables:Pr};case se.Mustache:return{format:Fr,extractVariables:Nr};case se.NONE:return{format:({text:t})=>t,extractVariables:()=>[]};default:D()}},Hr=w.union([w.string(),w.number(),w.boolean(),w.null()]),s1=w.lazy(()=>w.union([Hr,w.array(s1),w.record(s1)])),An=w.object({type:w.enum(["string","number","boolean","object","array","null","integer"]).describe("The type of the parameter"),description:w.string().optional().describe("A description of the parameter"),enum:w.array(w.string()).optional().describe("The allowed values")}).passthrough().describe("A map of parameter names to their definitions"),Dt=w.object({type:w.literal("object"),properties:w.record(w.union([An,w.object({anyOf:w.array(An)}).describe("A list of possible parameter names to their definitions")])),required:w.array(w.string()).optional().describe("The required parameters"),additionalProperties:w.boolean().optional().describe("Whether or not additional properties are allowed in the schema")}).passthrough(),b1=w.object({type:w.literal("function").describe("The type of the tool"),function:w.object({name:w.string().describe("The name of the function"),description:w.string().optional().describe("A description of the function"),parameters:Dt.extend({strict:w.boolean().optional().describe("Whether or not the arguments should exactly match the function definition, only supported for OpenAI models")}).describe("The parameters that the function accepts")}).passthrough().describe("The function definition")}).passthrough(),Dc=u1(b1,{removeAdditionalStrategy:"passthrough"}),L1=w.object({name:w.string(),description:w.string(),input_schema:Dt}),Pc=u1(L1,{removeAdditionalStrategy:"passthrough"}),Kr=L1.transform(n=>({type:"function",function:{name:n.name,description:n.description,parameters:n.input_schema}})),Br=b1.transform(n=>({name:n.function.name,description:n.function.description??n.function.name,input_schema:n.function.parameters})),Oc=w.union([b1,L1,s1]),$r=n=>{const{success:t,data:a}=b1.safeParse(n);if(t)return{provider:"OPENAI",validatedToolDefinition:a};const{success:i,data:r}=L1.safeParse(n);return i?{provider:"ANTHROPIC",validatedToolDefinition:r}:{provider:"UNKNOWN",validatedToolDefinition:null}},zn=n=>{const{provider:t,validatedToolDefinition:a}=$r(n);switch(t){case"AZURE_OPENAI":case"OPENAI":return a;case"ANTHROPIC":return Kr.parse(a);case"UNKNOWN":return null;default:D()}},Zr=({toolDefinition:n,targetProvider:t})=>{switch(t){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return Br.parse(n);case"GEMINI":return n;default:D()}};function _c(n){return{type:"function",function:{name:`new_function_${n}`,description:"",parameters:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}}function Fc(n){return{name:`new_function_${n}`,description:"",input_schema:{type:"object",properties:{new_arg:{type:"string"}},required:[]}}}const v1=w.object({id:w.string().describe("The ID of the tool call"),function:w.object({name:w.string().describe("The name of the function"),arguments:w.record(w.unknown()).describe("The arguments for the function")}).describe("The function that is being called").passthrough()}),Gr=w.array(v1),Nc=u1(Gr,{removeAdditionalStrategy:"passthrough"}),y1=w.object({id:w.string().describe("The ID of the tool call"),type:w.literal("tool_use"),name:w.string().describe("The name of the tool"),input:w.record(w.unknown()).describe("The input for the tool")}).passthrough(),Wr=w.array(y1),Rc=u1(Wr,{removeAdditionalStrategy:"passthrough"}),Ur=y1.transform(n=>({id:n.id,function:{name:n.name,arguments:n.input}})),jr=v1.transform(n=>({id:n.id,type:"tool_use",name:n.function.name,input:typeof n.function.arguments=="string"?{[n.function.arguments]:n.function.arguments}:n.function.arguments??{}})),Qr=w.union([v1,y1,s1]),Hc=w.array(Qr),qr=n=>{const{success:t,data:a}=v1.safeParse(n);if(t)return{provider:"OPENAI",validatedToolCall:a};const{success:i,data:r}=y1.safeParse(n);return i?{provider:"ANTHROPIC",validatedToolCall:r}:{provider:"UNKNOWN",validatedToolCall:null}},En=n=>{const{provider:t,validatedToolCall:a}=qr(n);switch(t){case"AZURE_OPENAI":case"OPENAI":return a;case"ANTHROPIC":return Ur.parse(a);case"UNKNOWN":return null;default:D()}},Xr=({toolCall:n,targetProvider:t})=>{switch(t){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return jr.parse(n);case"GEMINI":return n;default:D()}};function Kc(){return{id:"",function:{name:"",arguments:{}}}}function Bc(){return{id:"",type:"tool_use",name:"",input:{}}}function Yr({str:n,excludePrimitives:t=!1,excludeArray:a=!1}){try{const i=JSON.parse(n);if(t&&typeof i!="object"||a&&Array.isArray(i))return!1}catch{return!1}return!0}function Jr(n){return Yr({str:n,excludeArray:!0,excludePrimitives:!0})}function $c(n){try{return{json:JSON.parse(n)}}catch(t){return{json:null,parseError:t}}}function Zc(...n){try{return{json:JSON.stringify(...n)}}catch(t){return{json:null,stringifyError:t}}}const e2=({instanceTools:n,provider:t})=>n.map(a=>{switch(t){case"OPENAI":case"AZURE_OPENAI":{const i=zn(a.definition);return{...a,definition:i??a.definition}}case"ANTHROPIC":{const i=zn(a.definition),r=i?Zr({toolDefinition:i,targetProvider:t}):a.definition;return{...a,definition:r}}case"GEMINI":return a;default:D()}}),n2=({toolCalls:n,provider:t})=>{if(n!=null)return n.map(a=>{switch(t){case"OPENAI":case"AZURE_OPENAI":return En(a)??a;case"ANTHROPIC":{const i=En(a);return i!=null?Xr({toolCall:i,targetProvider:t}):a}case"GEMINI":return a;default:D()}})};let t2=0,a2=0,i2=1,r2=0;const Pt=()=>t2++,Vn=()=>i2++,Gc=()=>r2++,o2=()=>a2++,Ot=()=>({__type:"chat",messages:[{id:Vn(),role:"system",content:"You are a chatbot"},{id:Vn(),role:"user",content:"{{question}}"}]}),l2={__type:"text_completion",prompt:"{{question}}"};function s2(){return{id:Pt(),template:Ot(),model:{provider:zt,modelName:zr,invocationParameters:[],supportedInvocationParameters:[]},tools:[],toolChoice:"auto",output:void 0,spanId:null,activeRunId:null}}function Wc(){return{type:"json_schema",json_schema:{name:"response",schema:{type:"object",properties:{},required:[],additionalProperties:!1},strict:!0}}}function c2(n){if(n.instances!=null&&n.instances.length>0)return n.instances;const t=s2(),a=Object.values(n.modelConfigByProvider);if(!(a.length>0))return[t];const r=a.find(o=>o.provider===zt)??a[0];return t.model={...t.model,...r},[t]}const Uc=n=>Be($e((a,i)=>({streaming:!0,operationType:"chat",inputMode:"manual",input:{variablesValueCache:{}},templateLanguage:se.Mustache,instances:c2(n),setInput:r=>{a({input:r})},setOperationType:r=>{a(r==="chat"?{instances:i().instances.map(o=>({...o,template:Ot()}))}:{instances:i().instances.map(o=>({...o,template:l2}))}),a({operationType:r})},addInstance:()=>{const r=i().instances,o=i().instances[0];o&&a({instances:[...r,{...o,id:Pt(),activeRunId:null,experimentId:null,spanId:null}]})},updateModelSupportedInvocationParameters:({instanceId:r,supportedInvocationParameters:o})=>{const s=i().instances;a({instances:s.map(c=>c.id===r?{...c,model:{...c.model,supportedInvocationParameters:o,invocationParameters:Mi(c.model.invocationParameters,o)},tools:o.find(d=>d.canonicalName===Ti)?c.tools:[]}:c)})},updateProvider:({instanceId:r,provider:o,modelConfigByProvider:s})=>{const c=i().instances,d=c.find(g=>g.id===r);if(!d||d.model.provider===o)return;const u=s[o],p={model:u?{...u,supportedInvocationParameters:[],provider:o}:{modelName:null,baseUrl:null,invocationParameters:[],supportedInvocationParameters:[],apiVersion:null,endpoint:null,provider:o},tools:e2({instanceTools:d.tools,provider:o})};d.template.__type==="chat"&&(p.template={__type:"chat",messages:d.template.messages.map(g=>({...g,toolCalls:n2({toolCalls:g.toolCalls,provider:o})}))}),a({instances:c.map(g=>g.id===r?{...g,...p}:g)})},updateModel:({instanceId:r,patch:o})=>{const s=i().instances;s.find(d=>d.id===r)&&a({instances:s.map(d=>d.id===r?{...d,model:{...d.model,...o}}:d)})},deleteInstance:r=>{const o=i().instances;a({instances:o.filter(s=>s.id!==r)})},addMessage:({playgroundInstanceId:r})=>{const o=i().instances;a({instances:o.map(s=>s.id===r&&(s!=null&&s.template)&&(s==null?void 0:s.template.__type)==="chat"?{...s,messages:[...s.template.messages,{role:Er,content:"{question}"}]}:s)})},updateInstance:({instanceId:r,patch:o})=>{const s=i().instances;a({instances:s.map(c=>c.id===r?{...c,...o}:c)})},runPlaygroundInstances:()=>{const r=i().instances;a({instances:r.map(o=>({...o,activeRunId:o2(),spanId:null}))})},cancelPlaygroundInstances:()=>{a({instances:i().instances.map(r=>({...r,activeRunId:null,spanId:null}))})},markPlaygroundInstanceComplete:r=>{const o=i().instances;a({instances:o.map(s=>s.id===r?{...s,activeRunId:null}:s)})},setTemplateLanguage:r=>{a({templateLanguage:r})},setVariableValue:(r,o)=>{const s=i().input;a({input:{...s,variablesValueCache:{...s.variablesValueCache,[r]:o}}})},setStreaming:r=>{a({streaming:r})},updateInstanceModelInvocationParameters:({instanceId:r,invocationParameters:o})=>{i().instances.find(c=>c.id===r)&&a({instances:i().instances.map(c=>c.id===r?{...c,model:{...c.model,invocationParameters:o}}:c)})},upsertInvocationParameterInput:({instanceId:r,invocationParameterInput:o})=>{const s=i().instances.find(d=>d.id===r);if(!s)return;const c=s.model.invocationParameters.find(d=>fn(d,o));a(c?{instances:i().instances.map(d=>d.id===r?{...d,model:{...d.model,invocationParameters:d.model.invocationParameters.map(u=>fn(u,o)?o:u)}}:d)}:{instances:i().instances.map(d=>d.id===r?{...d,model:{...d.model,invocationParameters:[...d.model.invocationParameters,o]}}:d)})},deleteInvocationParameterInput:({instanceId:r,invocationParameterInputInvocationName:o})=>{i().instances.find(c=>c.id===r)&&a({instances:i().instances.map(c=>c.id===r?{...c,model:{...c.model,invocationParameters:c.model.invocationParameters.filter(d=>d.invocationName!==o)}}:c)})},...n}))),jc=n=>{const t=a=>({setCredential:({provider:i,value:r})=>{a({[i]:r})},...n});return Be()(qn($e(t),{name:"arize-phoenix-credentials"}))};function _t(n){return e("div",{onClick:t=>t.stopPropagation(),css:m`
|
|
148
148
|
display: inline-block;
|
|
149
149
|
`,children:e(Xn,{css:m`
|
|
150
150
|
color: var(--ac-global-color-primary);
|
|
@@ -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 L,bq as E,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 W,d as q,P as B,h as J,M as K,e as m,D as Q,f as V,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,W as Pe}from"./pages-
|
|
1
|
+
import{r as c,j as e,dL as v,l as n,U as F,R as w,D as L,bq as E,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 W,d as q,P as B,h as J,M as K,e as m,D as Q,f as V,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,W as Pe}from"./pages-DL7J9q9w.js";import{V as ye,d4 as ve,at as Fe,ab as we,d5 as Le,d6 as Ee}from"./components-DckIzNmE.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 Se(){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 Re(){const r=w.useContext(P);if(r===null)throw new Error("useFeatureFlags must be used within a FeatureFlagsProvider");return r}function ke(r){const[s,i]=c.useState(Se()),d=t=>{localStorage.setItem(f,JSON.stringify(t)),i(t)};return e(P.Provider,{value:{featureFlags:s,setFeatureFlags:d},children:e(Ie,{children:r.children})})}function Ie(r){const{children:s}=r,{featureFlags:i,setFeatureFlags:d}=Re(),[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(ye,{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 Ae(){return e(E,{styles:L`
|
|
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 Ee,aF as _e,aG as Qa,A as Md,r as u,j as e,R as ve,n as _a,D as v,l as s,aH as je,a0 as ee,U as B,t as L,a6 as He,a7 as W,a8 as Ce,a9 as Fe,ac as H,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ad,aN as _t,aO as kn,aP as Wa,a2 as ie,aQ as $a,ab as Pn,g as Xl,aR as Nd,a4 as Vt,G as zd,aS as Vd,aT as St,aU as vt,aV as ba,aW as ca,aX as Yl,o as Xa,aY as $d,ay as Od,az as Qd,aZ as jd,p as ei,q as qd,a_ as Ud,M as Bd,N as Hd,ah as ni,a$ as Gd,b0 as fl,b1 as Wd,b2 as Jd,b3 as Zd,b4 as Xd,b5 as Yd,b6 as ec,b7 as nc,b8 as ac,b9 as tc}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as $t,k as J,D as Z,B as Ot,y as qe,z as ne,G as lc,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ua,H as Ye,L as ja,J as ai,K as ic,M as ti,N as rc,O as sc,Q as ma,e as Me,f as Xn,T as ue,S as Qt,i as Ae,g as ae,E as at,a as Pe,U as jt,V as qt,c as Ln,o as hl,W as oc,n as dc,I as cc,m as kl,l as uc,u as mc,X as gc,r as pc,R as Ia,d as li}from"./vendor-arizeai-Do1793cv.js";import{s as Ut,a as me,l as yc,j as ii,b as xe,i as ri,c as si,d as xn,e as oi,f as fc,g as Pa,D as hc,h as qa,k as kc,T as Qn,m as bc,n as bl,o as Sc,p as vc,q as Sl,r as Cc,t as Fc,N as Kc,u as Tc,L as ye,v as Ke,w as Ra,B as xc,_ as k,x as Fn,I,C as Ic,G as di,y as Bt,P as ga,z as tt,S as Dc,A as Pc,E as Lc,F as wc,H as Ec,J as _c,K as Rc,M as Mc,O as un,Q as N,R as Ge,U as ci,V as C,W as ze,X as lt,Y as Yn,Z as Ne,$ as F,a0 as pe,a1 as Te,a2 as pa,a3 as pn,a4 as bn,a5 as it,a6 as Ie,a7 as re,a8 as Xe,a9 as wn,aa as se,ab as we,ac as ui,ad as We,ae as mi,af as en,ag as En,ah as Ht,ai as tn,aj as Sn,ak as Gt,al as gi,am as pi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as vn,au as Ac,av as Nc,aw as U,ax as yi,ay as Wt,az as rt,aA as ya,aB as fi,aC as fa,aD as ha,aE as hi,aF as Cn,aG as Re,aH as st,aI as _n,aJ as ki,aK as Jt,aL as Je,aM as bi,aN as zc,aO as Vc,aP as $c,aQ as Oc,aR as Qc,aS as ln,aT as rn,aU as jc,aV as Ue,aW as qc,aX as Uc,aY as Si,aZ as Bc,a_ as Hc,a$ as Fl,b0 as Gc,b1 as Wc,b2 as Jc,b3 as Zc,b4 as Xc,b5 as Yc,b6 as vi,b7 as eu,b8 as nu,b9 as au,ba as tu,bb as lu,bc as Un,bd as Zt,be as Ci,bf as ra,bg as Rt,bh as On,bi as Tn,bj as iu,bk as ru,bl as Fi,bm as ot,bn as Ki,bo as sn,bp as su,bq as ou,br as La,bs as Le,bt as Ua,bu as Ti,bv as du,bw as $e,bx as Xt,by as cu,bz as uu,bA as mu,bB as gu,bC as Yt,bD as Be,bE as nn,bF as ka,bG as pu,bH as dt,bI as xi,bJ as Ii,bK as Ct,bL as yu,bM as ct,bN as ut,bO as Ze,bP as Ve,bQ as fu,bR as el,bS as Di,bT as Pi,bU as Li,bV as hu,bW as on,bX as wi,bY as In,bZ as ku,b_ as Kl,b$ as Ei,c0 as bu,c1 as Su,c2 as vu,c3 as Cu,c4 as _i,c5 as dn,c6 as Fu,c7 as sa,c8 as Mt,c9 as Ku,ca as Ri,cb as Mi,cc as Tu,cd as xu,ce as Iu,cf as mt,cg as Ai,ch as Ma,ci as Tl,cj as Ni,ck as nl,cl as Du,cm as Pu,cn as al,co as zi,cp as Vi,cq as Lu,cr as wu,cs as Eu,ct as At,cu as $i,cv as _u,cw as Ru,cx as Oa,cy as Mu,cz as Au,cA as Oi,cB as Qi,cC as Nu,cD as zu,cE as Vu,cF as $u,cG as ji,cH as tl,cI as qi,cJ as Ou,cK as Qu,cL as Nt,cM as ju,cN as qu,cO as Uu,cP as Bu,cQ as Hu,cR as Gu,cS as Ui,cT as Wu,cU as Ju,cV as Zu,cW as Xu,cX as Yu,cY as em,cZ as nm,c_ as am,c$ as tm,d0 as lm,d1 as im,d2 as xl,d3 as Il}from"./components-Caw_U14D.js";import{p as Aa,R as Rn,n as Mn,i as rm,E as Bi,m as Hi,o as Gi,g as sm}from"./vendor-codemirror-BzwZPyJM.js";import{R as An,C as Na,X as Nn,Y as an,a as zn,T as Vn,B as oa,A as wa,b as Wi,c as ll,L as Ji,d as om,P as dm,e as cm,f as um}from"./vendor-recharts-_Jb7JjhG.js";const mm=4,gm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},pm="Unable to parse span input messages, expected messages which include a role and content.",ym="Unable to parse span output messages, expected messages which include a role and content.",fm="Unable to parse span output expected output.value to be present.",hm="Unable to parse span attributes, attributes must be valid JSON.",km="Unable to parse model config, expected llm.model_name to be present.",bm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",Sm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",vm="Unable to parse tools, expected tools to be an array of valid tools.",Cm="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"]},Da="TOOL_CHOICE",Ba="tool_choice",Bn="RESPONSE_FORMAT",jn="response_format",Fm=[Da,Bn],il=Ut()(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()}),Km=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"}}),Tm=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const xm=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}},Im=n=>{const{provider:a,toolChoice:t}=xm(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 Km.parse(t);default:me()}},Dm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return Tm.parse(n);case"GEMINI":return n;default:me()}},Pm=({toolChoice:n,targetProvider:a})=>{try{const t=Im(n);return Dm({toolChoice:t,targetProvider:a})}catch{return null}},Lm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Zi=R.object({[de.message]:R.object({[Ee.role]:R.string(),[Ee.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Ee.tool_calls]:R.array(Lm).optional(),[Ee.tool_call_id]:R.string().optional()})}),wm=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Zi)})}),Em=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Zi)})}),_m=R.object({[de.output]:R.object({value:R.string()})}),Xi=Ut()(R.enum(["user","ai","system","tool"])),Rm=Ut()(R.object({id:R.number(),role:Xi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(yc).optional()})),Mm=R.array(Rm),sl=R.lazy(()=>R.record(ii)),Am=sl,Yi=R.string().transform((n,a)=>{const{json:t}=xe(n);if(!ri(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}=Am.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Nm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),er=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Yi})}),zm=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Yi.pipe(R.object({response_format:sl.optional()}))})}),Vm=R.object({url:R.object({full:R.string(),path:R.string().optional()})}),$m=R.string().transform((n,a)=>{const{json:t}=xe(n);return t==null||!ri(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}=si.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),Om=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Qa.json_schema]:$m})}).optional()).optional()}).optional()}).optional(),Qm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:ii.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),jm=Md(Qm,{removeAdditionalStrategy:"passthrough"}),qm=R.string().transform((n,a)=>{const{json:t}=xe(n);return xn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=oi(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)}),Um=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:qm}).optional()}).optional()}).optional();function nr(n){return Xi.safeParse(n).success}function Ja(n){if(nr(n))return n;for(const[a,t]of Object.entries(gm))if(t.includes(n))return a;return kc}function Bm({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}=xe(t.function.arguments);xn(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 ar({messages:n,provider:a}){return n.map(({message:t})=>({id:Pa(),role:t.tool_call_id!=null?Ja("tool"):Ja(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:Bm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Hm({provider:n,parsedAttributes:a}){var l;const t=wm.safeParse(a);if(!t.success)return{messageParsingErrors:[pm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=er.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:ar({provider:n,messages:t.data.llm.input_messages})}}function Gm({provider:n,parsedAttributes:a}){const t=[],l=Em.safeParse(a);if(l.success)return{output:ar({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(ym);const i=_m.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(fm),{output:void 0,outputParsingErrors:t})}function Wm(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 Jm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return hc}function Zm(n){const{success:a,data:t}=Nm.safeParse(n);if(a){const l=Wm(t.llm.provider)||Jm(t.llm.model_name),i=Xm(n);return{modelConfig:{...Object.fromEntries(Object.entries(i).filter(([r,o])=>o!==null)),modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[km]}}function Xm(n){const{success:a,data:t}=Vm.safeParse(n);if(a)try{const l=new URL(t.url.full);let i=l;if(t.url.path)try{i=new URL(t.url.full.split(t.url.path)[0])}catch{}return{baseUrl:`${i.origin}${i.pathname}`,endpoint:l.origin,apiVersion:l.searchParams.get("api-version")||null}}catch{}return{baseUrl:null,apiVersion:null,endpoint:null}}function Ym(n,a=[]){const{success:t,data:l}=er.safeParse(n),i=[];return t||i.push(bm),{invocationParameters:og((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function eg(n){const{success:a,data:t}=zm.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[Sm]}}function ng(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:qa(),definition:t.tool.json_schema}).filter(t=>t!=null)}function ag(n){var l;const{data:a,success:t}=Om.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:ng(a),parsingErrors:[]}:{tools:null,parsingErrors:[vm]}}function tg(n){var l;const{success:a,data:t}=Um.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:[Cm]}}function lg(n){const a=fc(),{json:t,parseError:l}=xe(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[hm]};const i=n.invocationParameters,r=Zm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Hm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:y,outputParsingErrors:g}=Gm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:f,parsingErrors:p}=Ym(t,i),{variables:h,parsingErrors:b}=tg(t),{parsingErrors:K}=eg(t);o=o!=null?{...o,invocationParameters:K.length>0?f.filter(P=>P.invocationName!==jn&&P.canonicalName!==Bn):f}:null;const{tools:T,parsingErrors:D}=ag(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:y,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...D,...p,...K,...b]}}const ig=n=>Mm.safeParse(n).success,tr=({instance:n,templateLanguage:a})=>{if(a==Qn.NONE)return[];const t=new Set,l=n.template.__type,i=bc(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)},rg=({instances:n,templateLanguage:a})=>a==Qn.NONE?[]:Array.from(new Set(n.flatMap(t=>tr({instance:t,templateLanguage:a})))),lr=({instances:n,templateLanguage:a,input:t})=>{if(a==Qn.NONE)return{variablesMap:{},variableKeys:[]};const l=rg({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Hn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const sg=(n,a)=>n.filter(t=>a.some(l=>Hn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Hn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),gt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),og=(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,[gt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ha=n=>{const{provider:a,validatedToolDefinition:t}=vc(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:qa(),definition:Sl(a)};case"ANTHROPIC":return{id:qa(),definition:Cc(a)};case"GEMINI":return{id:qa(),definition:Sl(a)};default:me()}},dg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return Sc();case"GEMINI":return bl();default:me()}};function cg(n){return{content:n.content,role:ug(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ug(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const ir=({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=Pm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ba&&m.canonicalName!==Da),o.push({canonicalName:Da,invocationName:Ba,valueJson:c})):o=o.filter(m=>m.invocationName!==Ba&&m.canonicalName!==Da),o=r.length?sg(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(cg),model:{providerKey:i.model.provider,name:i.model.modelName||"",baseUrl:i.model.baseUrl,...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},mg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=ir({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=lr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...ir({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function rr(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function sr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Hn(l,t)))}const gg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function B1(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=gg(l),o=gt(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 or=u.createContext(null);function H1({children:n,...a}){const[t]=u.useState(()=>Fc(a));return e(or.Provider,{value:t,children:n})}function da(n,a){const t=ve.useContext(or);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return _a(t,n,a)}const dr=u.createContext(null);function pg(){const n=u.useContext(dr);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function G1(n){return e(dr.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const yg=v`
|
|
1
|
+
import{z as R,aD as de,aE as Ee,aF as _e,aG as Qa,A as Md,r as u,j as e,R as ve,n as _a,D as v,l as s,aH as je,a0 as ee,U as B,t as L,a6 as He,a7 as W,a8 as Ce,a9 as Fe,ac as H,aI as he,aJ as mn,aK as gn,aL as Oe,aM as Ad,aN as _t,aO as kn,aP as Wa,a2 as ie,aQ as $a,ab as Pn,g as Xl,aR as Nd,a4 as Vt,G as zd,aS as Vd,aT as St,aU as vt,aV as ba,aW as ca,aX as Yl,o as Xa,aY as $d,ay as Od,az as Qd,aZ as jd,p as ei,q as qd,a_ as Ud,M as Bd,N as Hd,ah as ni,a$ as Gd,b0 as fl,b1 as Wd,b2 as Jd,b3 as Zd,b4 as Xd,b5 as Yd,b6 as ec,b7 as nc,b8 as ac,b9 as tc}from"./vendor-DvC8cT4X.js";import{A as ce,C as j,h as $t,k as J,D as Z,B as Ot,y as qe,z as ne,G as lc,s as Ya,p as et,P as Wn,j as Jn,q as nt,v as Zn,w as ua,H as Ye,L as ja,J as ai,K as ic,M as ti,N as rc,O as sc,Q as ma,e as Me,f as Xn,T as ue,S as Qt,i as Ae,g as ae,E as at,a as Pe,U as jt,V as qt,c as Ln,o as hl,W as oc,n as dc,I as cc,m as kl,l as uc,u as mc,X as gc,r as pc,R as Ia,d as li}from"./vendor-arizeai-Do1793cv.js";import{s as Ut,a as me,l as yc,j as ii,b as xe,i as ri,c as si,d as xn,e as oi,f as fc,g as Pa,D as hc,h as qa,k as kc,T as Qn,m as bc,n as bl,o as Sc,p as vc,q as Sl,r as Cc,t as Fc,N as Kc,u as Tc,L as ye,v as Ke,w as Ra,B as xc,_ as k,x as Fn,I,C as Ic,G as di,y as Bt,P as ga,z as tt,S as Dc,A as Pc,E as Lc,F as wc,H as Ec,J as _c,K as Rc,M as Mc,O as un,Q as N,R as Ge,U as ci,V as C,W as ze,X as lt,Y as Yn,Z as Ne,$ as F,a0 as pe,a1 as Te,a2 as pa,a3 as pn,a4 as bn,a5 as it,a6 as Ie,a7 as re,a8 as Xe,a9 as wn,aa as se,ab as we,ac as ui,ad as We,ae as mi,af as en,ag as En,ah as Ht,ai as tn,aj as Sn,ak as Gt,al as gi,am as pi,an as yn,ao as ke,ap as be,aq as Se,ar as vl,as as Cl,at as vn,au as Ac,av as Nc,aw as U,ax as yi,ay as Wt,az as rt,aA as ya,aB as fi,aC as fa,aD as ha,aE as hi,aF as Cn,aG as Re,aH as st,aI as _n,aJ as ki,aK as Jt,aL as Je,aM as bi,aN as zc,aO as Vc,aP as $c,aQ as Oc,aR as Qc,aS as ln,aT as rn,aU as jc,aV as Ue,aW as qc,aX as Uc,aY as Si,aZ as Bc,a_ as Hc,a$ as Fl,b0 as Gc,b1 as Wc,b2 as Jc,b3 as Zc,b4 as Xc,b5 as Yc,b6 as vi,b7 as eu,b8 as nu,b9 as au,ba as tu,bb as lu,bc as Un,bd as Zt,be as Ci,bf as ra,bg as Rt,bh as On,bi as Tn,bj as iu,bk as ru,bl as Fi,bm as ot,bn as Ki,bo as sn,bp as su,bq as ou,br as La,bs as Le,bt as Ua,bu as Ti,bv as du,bw as $e,bx as Xt,by as cu,bz as uu,bA as mu,bB as gu,bC as Yt,bD as Be,bE as nn,bF as ka,bG as pu,bH as dt,bI as xi,bJ as Ii,bK as Ct,bL as yu,bM as ct,bN as ut,bO as Ze,bP as Ve,bQ as fu,bR as el,bS as Di,bT as Pi,bU as Li,bV as hu,bW as on,bX as wi,bY as In,bZ as ku,b_ as Kl,b$ as Ei,c0 as bu,c1 as Su,c2 as vu,c3 as Cu,c4 as _i,c5 as dn,c6 as Fu,c7 as sa,c8 as Mt,c9 as Ku,ca as Ri,cb as Mi,cc as Tu,cd as xu,ce as Iu,cf as mt,cg as Ai,ch as Ma,ci as Tl,cj as Ni,ck as nl,cl as Du,cm as Pu,cn as al,co as zi,cp as Vi,cq as Lu,cr as wu,cs as Eu,ct as At,cu as $i,cv as _u,cw as Ru,cx as Oa,cy as Mu,cz as Au,cA as Oi,cB as Qi,cC as Nu,cD as zu,cE as Vu,cF as $u,cG as ji,cH as tl,cI as qi,cJ as Ou,cK as Qu,cL as Nt,cM as ju,cN as qu,cO as Uu,cP as Bu,cQ as Hu,cR as Gu,cS as Ui,cT as Wu,cU as Ju,cV as Zu,cW as Xu,cX as Yu,cY as em,cZ as nm,c_ as am,c$ as tm,d0 as lm,d1 as im,d2 as xl,d3 as Il}from"./components-DckIzNmE.js";import{p as Aa,R as Rn,n as Mn,i as rm,E as Bi,m as Hi,o as Gi,g as sm}from"./vendor-codemirror-BzwZPyJM.js";import{R as An,C as Na,X as Nn,Y as an,a as zn,T as Vn,B as oa,A as wa,b as Wi,c as ll,L as Ji,d as om,P as dm,e as cm,f as um}from"./vendor-recharts-_Jb7JjhG.js";const mm=4,gm={user:["user","human"],ai:["assistant","bot","ai"],system:["system"],tool:["tool"]},pm="Unable to parse span input messages, expected messages which include a role and content.",ym="Unable to parse span output messages, expected messages which include a role and content.",fm="Unable to parse span output expected output.value to be present.",hm="Unable to parse span attributes, attributes must be valid JSON.",km="Unable to parse model config, expected llm.model_name to be present.",bm="Unable to parse model config, expected llm.invocation_parameters JSON string to be present.",Sm="Unable to parse invocation parameters response_format, expected llm.invocation_parameters.response_format to be a well formed json object or undefined.",vm="Unable to parse tools, expected tools to be an array of valid tools.",Cm="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"]},Da="TOOL_CHOICE",Ba="tool_choice",Bn="RESPONSE_FORMAT",jn="response_format",Fm=[Da,Bn],il=Ut()(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()}),Km=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"}}),Tm=il.transform(n=>typeof n=="string"?{type:"auto"}:{type:"tool",name:n.function.name});R.union([il,rl]);const xm=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}},Im=n=>{const{provider:a,toolChoice:t}=xm(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 Km.parse(t);default:me()}},Dm=({toolChoice:n,targetProvider:a})=>{switch(a){case"AZURE_OPENAI":case"OPENAI":return n;case"ANTHROPIC":return Tm.parse(n);case"GEMINI":return n;default:me()}},Pm=({toolChoice:n,targetProvider:a})=>{try{const t=Im(n);return Dm({toolChoice:t,targetProvider:a})}catch{return null}},Lm=R.object({tool_call:R.object({id:R.string().optional(),function:R.object({name:R.string(),arguments:R.string()}).partial()}).partial()}).partial(),Zi=R.object({[de.message]:R.object({[Ee.role]:R.string(),[Ee.content]:R.union([R.string(),R.array(R.record(R.string(),R.unknown()))]).default(""),[Ee.tool_calls]:R.array(Lm).optional(),[Ee.tool_call_id]:R.string().optional()})}),wm=R.object({[de.llm]:R.object({[_e.input_messages]:R.array(Zi)})}),Em=R.object({[de.llm]:R.object({[_e.output_messages]:R.array(Zi)})}),_m=R.object({[de.output]:R.object({value:R.string()})}),Xi=Ut()(R.enum(["user","ai","system","tool"])),Rm=Ut()(R.object({id:R.number(),role:Xi,content:R.string().optional(),toolCallId:R.string().optional(),toolCalls:R.array(yc).optional()})),Mm=R.array(Rm),sl=R.lazy(()=>R.record(ii)),Am=sl,Yi=R.string().transform((n,a)=>{const{json:t}=xe(n);if(!ri(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}=Am.safeParse(t);return l?i:(a.addIssue({code:R.ZodIssueCode.custom,message:"The invocation parameters must be a valid JSON object"}),R.NEVER)}).default("{}"),Nm=R.object({[de.llm]:R.object({[_e.provider]:R.string().optional(),[_e.model_name]:R.string()})}),er=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Yi})}),zm=R.object({[de.llm]:R.object({[_e.invocation_parameters]:Yi.pipe(R.object({response_format:sl.optional()}))})}),Vm=R.object({url:R.object({full:R.string(),path:R.string().optional()})}),$m=R.string().transform((n,a)=>{const{json:t}=xe(n);return t==null||!ri(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}=si.safeParse(n);return l?t:(a.addIssue({code:R.ZodIssueCode.custom,message:"The tool JSON schema must be a valid tool schema"}),R.NEVER)}),Om=R.object({[de.llm]:R.object({[_e.tools]:R.array(R.object({[de.tool]:R.object({[Qa.json_schema]:$m})}).optional()).optional()}).optional()}).optional(),Qm=R.lazy(()=>R.object({type:R.literal("json_schema"),json_schema:R.object({name:R.string().describe("The name of the schema"),schema:ii.describe("The schema itself in JSON format"),strict:R.literal(!0).describe("The schema must be strict")})})),jm=Md(Qm,{removeAdditionalStrategy:"passthrough"}),qm=R.string().transform((n,a)=>{const{json:t}=xe(n);return xn(t)?Object.entries(t).reduce((i,[r,o])=>{if(typeof o=="string")i[r]=o;else{const{json:c}=oi(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)}),Um=R.object({[de.llm]:R.object({[_e.prompt_template]:R.object({variables:qm}).optional()}).optional()}).optional();function nr(n){return Xi.safeParse(n).success}function Ja(n){if(nr(n))return n;for(const[a,t]of Object.entries(gm))if(t.includes(n))return a;return kc}function Bm({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}=xe(t.function.arguments);xn(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 ar({messages:n,provider:a}){return n.map(({message:t})=>({id:Pa(),role:t.tool_call_id!=null?Ja("tool"):Ja(t.role),content:typeof t.content=="string"?t.content:void 0,toolCalls:Bm({provider:a,toolCalls:t.tool_calls}),toolCallId:t.tool_call_id}))}function Hm({provider:n,parsedAttributes:a}){var l;const t=wm.safeParse(a);if(!t.success)return{messageParsingErrors:[pm],messages:null};if(n==="ANTHROPIC"){const{success:i,data:r}=er.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:ar({provider:n,messages:t.data.llm.input_messages})}}function Gm({provider:n,parsedAttributes:a}){const t=[],l=Em.safeParse(a);if(l.success)return{output:ar({provider:n,messages:l.data.llm.output_messages}),outputParsingErrors:t};t.push(ym);const i=_m.safeParse(a);return i.success?{output:i.data.output.value,outputParsingErrors:t}:(t.push(fm),{output:void 0,outputParsingErrors:t})}function Wm(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 Jm(n){for(const a of Object.keys(Dl))if(Dl[a].some(l=>n.includes(l)))return a;return hc}function Zm(n){const{success:a,data:t}=Nm.safeParse(n);if(a){const l=Wm(t.llm.provider)||Jm(t.llm.model_name),i=Xm(n);return{modelConfig:{...Object.fromEntries(Object.entries(i).filter(([r,o])=>o!==null)),modelName:t.llm.model_name,provider:l,invocationParameters:[],supportedInvocationParameters:[]},parsingErrors:[]}}return{modelConfig:null,parsingErrors:[km]}}function Xm(n){const{success:a,data:t}=Vm.safeParse(n);if(a)try{const l=new URL(t.url.full);let i=l;if(t.url.path)try{i=new URL(t.url.full.split(t.url.path)[0])}catch{}return{baseUrl:`${i.origin}${i.pathname}`,endpoint:l.origin,apiVersion:l.searchParams.get("api-version")||null}}catch{}return{baseUrl:null,apiVersion:null,endpoint:null}}function Ym(n,a=[]){const{success:t,data:l}=er.safeParse(n),i=[];return t||i.push(bm),{invocationParameters:og((l==null?void 0:l.llm.invocation_parameters)??{},a),parsingErrors:i}}function eg(n){const{success:a,data:t}=zm.safeParse(n);return a?{responseFormat:t.llm.invocation_parameters.response_format,parsingErrors:[]}:{responseFormat:void 0,parsingErrors:[Sm]}}function ng(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:qa(),definition:t.tool.json_schema}).filter(t=>t!=null)}function ag(n){var l;const{data:a,success:t}=Om.safeParse(n);return t?((l=a==null?void 0:a.llm)==null?void 0:l.tools)==null?{tools:null,parsingErrors:[]}:{tools:ng(a),parsingErrors:[]}:{tools:null,parsingErrors:[vm]}}function tg(n){var l;const{success:a,data:t}=Um.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:[Cm]}}function lg(n){const a=fc(),{json:t,parseError:l}=xe(n.attributes);if(l)return{playgroundInstance:{...a,spanId:(n==null?void 0:n.id)??null},parsingErrors:[hm]};const i=n.invocationParameters,r=Zm(t);let{modelConfig:o}=r;const{parsingErrors:c}=r,{messages:d,messageParsingErrors:m}=Hm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{output:y,outputParsingErrors:g}=Gm({provider:(o==null?void 0:o.provider)??a.model.provider,parsedAttributes:t}),{invocationParameters:f,parsingErrors:p}=Ym(t,i),{variables:h,parsingErrors:b}=tg(t),{parsingErrors:K}=eg(t);o=o!=null?{...o,invocationParameters:K.length>0?f.filter(P=>P.invocationName!==jn&&P.canonicalName!==Bn):f}:null;const{tools:T,parsingErrors:D}=ag(t);return{playgroundInstance:{...a,model:o??a.model,template:d!=null?{__type:"chat",messages:d}:a.template,output:y,spanId:n.id,tools:T??a.tools},playgroundInput:h!=null?{variablesValueCache:h}:void 0,parsingErrors:[...m,...g,...c,...D,...p,...K,...b]}}const ig=n=>Mm.safeParse(n).success,tr=({instance:n,templateLanguage:a})=>{if(a==Qn.NONE)return[];const t=new Set,l=n.template.__type,i=bc(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)},rg=({instances:n,templateLanguage:a})=>a==Qn.NONE?[]:Array.from(new Set(n.flatMap(t=>tr({instance:t,templateLanguage:a})))),lr=({instances:n,templateLanguage:a,input:t})=>{if(a==Qn.NONE)return{variablesMap:{},variableKeys:[]};const l=rg({instances:n,templateLanguage:a}),i=t.variablesValueCache??{};return{variablesMap:l.reduce((o,c)=>(o[c]=i[c]||"",o),{}),variableKeys:l}};function Hn(n,a){return n.invocationName===a.invocationName||n.canonicalName!=null&&a.canonicalName!=null&&n.canonicalName===a.canonicalName}const sg=(n,a)=>n.filter(t=>a.some(l=>Hn(l,t))).map(t=>{var l;return{...t,invocationName:((l=a.find(i=>Hn(i,t)))==null?void 0:l.invocationName)??t.invocationName}}),gt=n=>n.replace(/_([a-z])/g,(a,t)=>t.toUpperCase()),og=(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,[gt(i.invocationInputField)]:l}}).filter(t=>t!=null),Ha=n=>{const{provider:a,validatedToolDefinition:t}=vc(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:qa(),definition:Sl(a)};case"ANTHROPIC":return{id:qa(),definition:Cc(a)};case"GEMINI":return{id:qa(),definition:Sl(a)};default:me()}},dg=n=>{switch(n){case"OPENAI":case"AZURE_OPENAI":return bl();case"ANTHROPIC":return Sc();case"GEMINI":return bl();default:me()}};function cg(n){return{content:n.content,role:ug(n.role),toolCalls:n.toolCalls,toolCallId:n.toolCallId}}function ug(n){switch(n){case"system":return"SYSTEM";case"user":return"USER";case"tool":return"TOOL";case"ai":return"AI";default:me()}}const ir=({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=Pm({toolChoice:i.toolChoice,targetProvider:i.model.provider});i.tools.length>0?(o=o.filter(m=>m.invocationName!==Ba&&m.canonicalName!==Da),o.push({canonicalName:Da,invocationName:Ba,valueJson:c})):o=o.filter(m=>m.invocationName!==Ba&&m.canonicalName!==Da),o=r.length?sg(o,r):o;const d=i.model.provider==="AZURE_OPENAI"?{endpoint:i.model.endpoint,apiVersion:i.model.apiVersion}:{};return{messages:i.template.messages.map(cg),model:{providerKey:i.model.provider,name:i.model.modelName||"",baseUrl:i.model.baseUrl,...d},invocationParameters:o,tools:i.tools.length?i.tools.map(m=>m.definition):void 0,apiKey:t[i.model.provider]||null}},mg=({playgroundStore:n,instanceId:a,credentials:t})=>{const l=ir({playgroundStore:n,instanceId:a,credentials:t}),{instances:i,templateLanguage:r,input:o}=n.getState(),{variablesMap:c}=lr({instances:i,input:o,templateLanguage:r});return{...l,template:{variables:c,language:r}}},Ll=({playgroundStore:n,instanceId:a,credentials:t,datasetId:l})=>({...ir({playgroundStore:n,instanceId:a,credentials:t}),templateLanguage:n.getState().templateLanguage,datasetId:l});function rr(n){return n==null||n===""?"{}":typeof n=="string"?n:JSON.stringify(n,null,2)}function sr(n,a){return a.filter(t=>t.required).every(t=>n.some(l=>Hn(l,t)))}const gg=n=>{for(const[a,t]of Object.entries(n))if(a.endsWith("DefaultValue")&&t!=null)return n[a]};function B1(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=gg(l),o=gt(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 or=u.createContext(null);function H1({children:n,...a}){const[t]=u.useState(()=>Fc(a));return e(or.Provider,{value:t,children:n})}function da(n,a){const t=ve.useContext(or);if(!t)throw new Error("Missing CredentialsContext.Provider in the tree");return _a(t,n,a)}const dr=u.createContext(null);function pg(){const n=u.useContext(dr);if(n===null)throw new Error("useFunctionality must be used within a FunctionalityProvider");return n}function G1(n){return e(dr.Provider,{value:{authenticationEnabled:window.Config.authenticationEnabled},children:n.children})}const yg=v`
|
|
2
2
|
display: flex;
|
|
3
3
|
direction: row;
|
|
4
4
|
height: 100vh;
|
phoenix/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "7.12.
|
|
1
|
+
__version__ = "7.12.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|