arize-phoenix 5.6.0__py3-none-any.whl → 5.7.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (34) hide show
  1. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/METADATA +2 -2
  2. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/RECORD +34 -25
  3. phoenix/config.py +42 -0
  4. phoenix/server/api/helpers/playground_clients.py +671 -0
  5. phoenix/server/api/helpers/playground_registry.py +70 -0
  6. phoenix/server/api/helpers/playground_spans.py +325 -0
  7. phoenix/server/api/input_types/ChatCompletionInput.py +38 -0
  8. phoenix/server/api/input_types/GenerativeModelInput.py +17 -0
  9. phoenix/server/api/input_types/InvocationParameters.py +156 -13
  10. phoenix/server/api/input_types/TemplateOptions.py +10 -0
  11. phoenix/server/api/mutations/__init__.py +4 -0
  12. phoenix/server/api/mutations/chat_mutations.py +374 -0
  13. phoenix/server/api/queries.py +41 -52
  14. phoenix/server/api/schema.py +42 -10
  15. phoenix/server/api/subscriptions.py +326 -595
  16. phoenix/server/api/types/ChatCompletionSubscriptionPayload.py +44 -0
  17. phoenix/server/api/types/GenerativeProvider.py +27 -3
  18. phoenix/server/api/types/Span.py +37 -0
  19. phoenix/server/api/types/TemplateLanguage.py +9 -0
  20. phoenix/server/app.py +61 -13
  21. phoenix/server/main.py +14 -1
  22. phoenix/server/static/.vite/manifest.json +9 -9
  23. phoenix/server/static/assets/{components-C70HJiXz.js → components-Csu8UKOs.js} +114 -114
  24. phoenix/server/static/assets/{index-DLe1Oo3l.js → index-Bk5C9EA7.js} +1 -1
  25. phoenix/server/static/assets/{pages-C8-Sl7JI.js → pages-UeWaKXNs.js} +328 -268
  26. phoenix/server/templates/index.html +1 -0
  27. phoenix/services.py +4 -0
  28. phoenix/session/session.py +15 -1
  29. phoenix/utilities/template_formatters.py +11 -1
  30. phoenix/version.py +1 -1
  31. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/WHEEL +0 -0
  32. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/entry_points.txt +0 -0
  33. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/licenses/IP_NOTICE +0 -0
  34. {arize_phoenix-5.6.0.dist-info → arize_phoenix-5.7.0.dist-info}/licenses/LICENSE +0 -0
@@ -88,6 +88,7 @@
88
88
  },
89
89
  authenticationEnabled: Boolean("{{authentication_enabled}}" == "True"),
90
90
  oAuth2Idps: {{ oauth2_idps | tojson }},
91
+ websocketsEnabled: Boolean("{{websockets_enabled}}" == "True"),
91
92
  }),
92
93
  writable: false
93
94
  });
phoenix/services.py CHANGED
@@ -118,6 +118,7 @@ class AppService(Service):
118
118
  reference_inferences_name: Optional[str],
119
119
  corpus_inferences_name: Optional[str],
120
120
  trace_dataset_name: Optional[str],
121
+ enable_websockets: bool,
121
122
  ):
122
123
  self.database_url = database_url
123
124
  self.export_path = export_path
@@ -129,6 +130,7 @@ class AppService(Service):
129
130
  self.__reference_inferences_name = reference_inferences_name
130
131
  self.__corpus_inferences_name = corpus_inferences_name
131
132
  self.__trace_dataset_name = trace_dataset_name
133
+ self.enable_websockets = enable_websockets
132
134
  super().__init__()
133
135
 
134
136
  @property
@@ -156,5 +158,7 @@ class AppService(Service):
156
158
  command.extend(["--corpus", str(self.__corpus_inferences_name)])
157
159
  if self.__trace_dataset_name is not None:
158
160
  command.extend(["--trace", str(self.__trace_dataset_name)])
161
+ if self.enable_websockets:
162
+ command.append("--enable-websockets")
159
163
  logger.info(f"command: {' '.join(command)}")
160
164
  return command
@@ -24,6 +24,7 @@ from phoenix.config import (
24
24
  ENV_PHOENIX_PORT,
25
25
  ensure_working_dir,
26
26
  get_env_database_connection_str,
27
+ get_env_enable_websockets,
27
28
  get_env_host,
28
29
  get_env_port,
29
30
  get_exported_files,
@@ -269,6 +270,7 @@ class ProcessSession(Session):
269
270
  self,
270
271
  database_url: str,
271
272
  primary_inferences: Inferences,
273
+ enable_websockets: bool,
272
274
  reference_inferences: Optional[Inferences] = None,
273
275
  corpus_inferences: Optional[Inferences] = None,
274
276
  trace_dataset: Optional[TraceDataset] = None,
@@ -319,6 +321,7 @@ class ProcessSession(Session):
319
321
  trace_dataset_name=(
320
322
  self.trace_dataset.name if self.trace_dataset is not None else None
321
323
  ),
324
+ enable_websockets=enable_websockets,
322
325
  )
323
326
 
324
327
  @property
@@ -335,6 +338,7 @@ class ThreadSession(Session):
335
338
  self,
336
339
  database_url: str,
337
340
  primary_inferences: Inferences,
341
+ enable_websockets: bool,
338
342
  reference_inferences: Optional[Inferences] = None,
339
343
  corpus_inferences: Optional[Inferences] = None,
340
344
  trace_dataset: Optional[TraceDataset] = None,
@@ -375,6 +379,7 @@ class ThreadSession(Session):
375
379
  export_path=self.export_path,
376
380
  model=self.model,
377
381
  authentication_enabled=False,
382
+ enable_websockets=enable_websockets,
378
383
  corpus=self.corpus,
379
384
  umap_params=self.umap_parameters,
380
385
  initial_spans=trace_dataset.to_spans() if trace_dataset else None,
@@ -438,6 +443,7 @@ def launch_app(
438
443
  run_in_thread: bool = True,
439
444
  notebook_environment: Optional[Union[NotebookEnvironment, str]] = None,
440
445
  use_temp_dir: bool = True,
446
+ enable_websockets: Optional[bool] = None,
441
447
  ) -> Optional[Session]:
442
448
  """
443
449
  Launches the phoenix application and returns a session to interact with.
@@ -472,7 +478,8 @@ def launch_app(
472
478
  use_temp_dir: bool, optional, default=True
473
479
  Whether to use a temporary directory to store the data. If set to False, the data will be
474
480
  stored in the directory specified by PHOENIX_WORKING_DIR environment variable via SQLite.
475
-
481
+ enable_websockets: bool, optional, default=False
482
+ Whether to enable websockets.
476
483
 
477
484
  Returns
478
485
  -------
@@ -553,10 +560,16 @@ def launch_app(
553
560
  else:
554
561
  database_url = get_env_database_connection_str()
555
562
 
563
+ enable_websockets_env = get_env_enable_websockets() or False
564
+ enable_websockets = (
565
+ enable_websockets if enable_websockets is not None else enable_websockets_env
566
+ )
567
+
556
568
  if run_in_thread:
557
569
  _session = ThreadSession(
558
570
  database_url,
559
571
  primary,
572
+ enable_websockets,
560
573
  reference,
561
574
  corpus,
562
575
  trace,
@@ -570,6 +583,7 @@ def launch_app(
570
583
  _session = ProcessSession(
571
584
  database_url,
572
585
  primary,
586
+ enable_websockets,
573
587
  reference,
574
588
  corpus,
575
589
  trace,
@@ -19,7 +19,9 @@ class TemplateFormatter(ABC):
19
19
  """
20
20
  template_variable_names = self.parse(template)
21
21
  if missing_template_variables := template_variable_names - set(variables.keys()):
22
- raise ValueError(f"Missing template variables: {', '.join(missing_template_variables)}")
22
+ raise TemplateFormatterError(
23
+ f"Missing template variable(s): {', '.join(missing_template_variables)}"
24
+ )
23
25
  return self._format(template, template_variable_names, **variables)
24
26
 
25
27
  @abstractmethod
@@ -69,3 +71,11 @@ class MustacheTemplateFormatter(TemplateFormatter):
69
71
  string=template,
70
72
  )
71
73
  return template
74
+
75
+
76
+ class TemplateFormatterError(Exception):
77
+ """
78
+ An error raised when template formatting fails.
79
+ """
80
+
81
+ pass
phoenix/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "5.6.0"
1
+ __version__ = "5.7.0"