arize-phoenix 7.1.1__py3-none-any.whl → 7.3.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.
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/METADATA +9 -8
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/RECORD +14 -14
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/WHEEL +1 -1
- phoenix/server/api/dataloaders/session_io.py +9 -5
- phoenix/server/api/helpers/playground_clients.py +9 -2
- phoenix/server/static/.vite/manifest.json +9 -9
- phoenix/server/static/assets/{components-DaxEPah8.js → components-CTfaHD1U.js} +106 -109
- phoenix/server/static/assets/{index-DxfKd3lv.js → index-Lokew6Qd.js} +2 -2
- phoenix/server/static/assets/{pages-CY7Swxhi.js → pages-B-fbd0DU.js} +231 -230
- phoenix/server/templates/index.html +0 -4
- phoenix/version.py +1 -1
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-7.1.1.dist-info → arize_phoenix-7.3.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: arize-phoenix
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3.0
|
|
4
4
|
Summary: AI Observability and Evaluation
|
|
5
5
|
Project-URL: Documentation, https://docs.arize.com/phoenix/
|
|
6
6
|
Project-URL: Issues, https://github.com/Arize-ai/phoenix/issues
|
|
7
7
|
Project-URL: Source, https://github.com/Arize-ai/phoenix
|
|
8
8
|
Author-email: Arize AI <phoenix-devs@arize.com>
|
|
9
9
|
License: Elastic-2.0
|
|
10
|
+
License-File: IP_NOTICE
|
|
11
|
+
License-File: LICENSE
|
|
10
12
|
Keywords: Explainability,Monitoring,Observability
|
|
11
13
|
Classifier: Programming Language :: Python
|
|
12
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
@@ -154,12 +156,12 @@ Description-Content-Type: text/markdown
|
|
|
154
156
|
|
|
155
157
|
Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:
|
|
156
158
|
|
|
157
|
-
- [**_Tracing_**](https://docs.arize.com/phoenix/tracing/
|
|
159
|
+
- [**_Tracing_**](https://docs.arize.com/phoenix/tracing/llm-traces) - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
|
|
158
160
|
- [**_Evaluation_**](https://docs.arize.com/phoenix/evaluation/llm-evals) - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
|
|
159
161
|
- [**_Datasets_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets) - Create versioned datasets of examples for experimentation, evaluation, and fine-tuning.
|
|
160
162
|
- [**_Experiments_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets#experiments) - Track and evaluate changes to prompts, LLMs, and retrieval.
|
|
161
163
|
|
|
162
|
-
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/
|
|
164
|
+
Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.
|
|
163
165
|
|
|
164
166
|
Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.
|
|
165
167
|
|
|
@@ -192,9 +194,9 @@ Phoenix container images are available via [Docker Hub](https://hub.docker.com/r
|
|
|
192
194
|
| REST API | ✅ |
|
|
193
195
|
| GraphQL API | ✅ |
|
|
194
196
|
| Data Retention | Customizable |
|
|
195
|
-
| Authentication
|
|
196
|
-
| Social Login
|
|
197
|
-
| RBAC
|
|
197
|
+
| [Authentication](https://docs.arize.com/phoenix/deployment/authentication) | ✅ |
|
|
198
|
+
| [Social Login](https://docs.arize.com/phoenix/deployment/authentication#configuring-oauth2-identity-providers) | ✅ |
|
|
199
|
+
| [RBAC](https://docs.arize.com/phoenix/deployment/authentication#permissions) | ✅ |
|
|
198
200
|
| Projects | ✅ |
|
|
199
201
|
| [Self-Hosting](https://docs.arize.com/phoenix/deployment) | ✅ |
|
|
200
202
|
| Jupyter Notebooks | ✅ |
|
|
@@ -244,7 +246,6 @@ Join our community to connect with thousands of AI builders.
|
|
|
244
246
|
- 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
|
|
245
247
|
- 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues).
|
|
246
248
|
- 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix).
|
|
247
|
-
- 💌️ Sign up for our [mailing list](https://phoenix.arize.com/#updates).
|
|
248
249
|
- 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45) to see where we're heading next.
|
|
249
250
|
|
|
250
251
|
## Breaking Changes
|
|
@@ -6,7 +6,7 @@ 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=sdpc-9h8PmmRVaqNA9R2vvMOVXFYIKW9zf9YS8np6ig,22
|
|
10
10
|
phoenix/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
phoenix/core/embedding_dimension.py,sha256=zKGbcvwOXgLf-yrJBpQyKtd-LEOPRKHnUToyAU8Owis,87
|
|
12
12
|
phoenix/core/model.py,sha256=qBFraOtmwCCnWJltKNP18DDG0mULXigytlFsa6YOz6k,4837
|
|
@@ -116,7 +116,7 @@ phoenix/server/api/dataloaders/latency_ms_quantile.py,sha256=CHWV9nvEEM3xqpXWuby
|
|
|
116
116
|
phoenix/server/api/dataloaders/min_start_or_max_end_times.py,sha256=1jYglTXv4S8k7OWSGdgeJ2OxVCmZtX8a6sjJp9GPZ04,2783
|
|
117
117
|
phoenix/server/api/dataloaders/project_by_name.py,sha256=O24Rjs0ZQaYtSnPfA6YBQfbHfUgNsHKUcc_gIKyK9vo,1086
|
|
118
118
|
phoenix/server/api/dataloaders/record_counts.py,sha256=NLlMEaJ-HxiJavqbSkMbzOrIRzqzYxO8-t2mfp1vXqM,4160
|
|
119
|
-
phoenix/server/api/dataloaders/session_io.py,sha256=
|
|
119
|
+
phoenix/server/api/dataloaders/session_io.py,sha256=1c2b-87KGHuF2sgeQvXmIv1-kFHEt6CfAvuH11jKfh4,3168
|
|
120
120
|
phoenix/server/api/dataloaders/session_num_traces.py,sha256=lu5EMdQWQzEr_4wCiu7FycnIShjGf0yQXpwBG_DDzGs,1050
|
|
121
121
|
phoenix/server/api/dataloaders/session_num_traces_with_error.py,sha256=Y5xmr4Nme2ZMfvJljW9yhBfuCNdGlxTRka0h9VdXdqA,1149
|
|
122
122
|
phoenix/server/api/dataloaders/session_token_usages.py,sha256=9RXZUyzDmzp5WDp_BpmvvDhk5gIIaV97x0xxUM1H9bA,1586
|
|
@@ -134,7 +134,7 @@ phoenix/server/api/dataloaders/cache/__init__.py,sha256=SYoOM9n8FJaMdQarma5d1blu
|
|
|
134
134
|
phoenix/server/api/dataloaders/cache/two_tier_cache.py,sha256=cmo8FUT3E91R139IEzh4yCga-6nTamc5KPXAfMrzNDM,2315
|
|
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=AMlKY9_e0wnTrTSSQemM5NHfnpwARSytx-m9YK6f6bY,8421
|
|
137
|
-
phoenix/server/api/helpers/playground_clients.py,sha256=
|
|
137
|
+
phoenix/server/api/helpers/playground_clients.py,sha256=8gJ7RcOE9pyinRIkZ-elr17Fem9jIsfpuuyxlzPA43w,36450
|
|
138
138
|
phoenix/server/api/helpers/playground_registry.py,sha256=CPLMziFB2wmr-dfbx7VbzO2f8YIG_k5RftzvGXYGQ1w,2570
|
|
139
139
|
phoenix/server/api/helpers/playground_spans.py,sha256=qGk7V7IZK7EkRE1mvZyROpLN5kgOahOZifFzUWmqYFc,16546
|
|
140
140
|
phoenix/server/api/input_types/AddExamplesToDatasetInput.py,sha256=mIQz0S_z8YdrktKIY6RCvtNJ2yZF9pYvTGgasUsI-54,430
|
|
@@ -286,10 +286,10 @@ phoenix/server/static/apple-touch-icon-76x76.png,sha256=CT_xT12I0u2i0WU8JzBZBuOQ
|
|
|
286
286
|
phoenix/server/static/apple-touch-icon.png,sha256=fOfpjqGpWYbJ0eAurKsyoZP1EAs6ZVooBJ_SGk2ZkDs,3801
|
|
287
287
|
phoenix/server/static/favicon.ico,sha256=bY0vvCKRftemZfPShwZtE93DiiQdaYaozkPGwNFr6H8,34494
|
|
288
288
|
phoenix/server/static/modernizr.js,sha256=mvK-XtkNqjOral-QvzoqsyOMECXIMu5BQwSVN_wcU9c,2564
|
|
289
|
-
phoenix/server/static/.vite/manifest.json,sha256=
|
|
290
|
-
phoenix/server/static/assets/components-
|
|
291
|
-
phoenix/server/static/assets/index-
|
|
292
|
-
phoenix/server/static/assets/pages-
|
|
289
|
+
phoenix/server/static/.vite/manifest.json,sha256=LRP20hibGrBFJhgD6mLsBfV8uLVmYLqUy9bcdCP4R-w,2163
|
|
290
|
+
phoenix/server/static/assets/components-CTfaHD1U.js,sha256=Fv5fYfkYcwsMRjUgfc470M0W79YxmhXmXL8sZGEQqGw,320415
|
|
291
|
+
phoenix/server/static/assets/index-Lokew6Qd.js,sha256=FXvVKt8BjFtfKRoo5bzlVSe_4FS5puGy1d-3VXisoOQ,8033
|
|
292
|
+
phoenix/server/static/assets/pages-B-fbd0DU.js,sha256=JydZuG-I1ahey2TdRv1sQJhD2I8kM_D2d_SVeoWBdCM,670327
|
|
293
293
|
phoenix/server/static/assets/vendor-DwOx_a-2.js,sha256=BSQT2H6j3XW9U4TYNJ_dAQvroHbfRpHbfIuOoAQW_V0,2168792
|
|
294
294
|
phoenix/server/static/assets/vendor-DxkFTwjz.css,sha256=nZrkr0u6NNElFGvpWHk9GTHeGoibCXCli1bE7mXZGZg,1816
|
|
295
295
|
phoenix/server/static/assets/vendor-arizeai-BWSsCZNG.js,sha256=7aYt8L3aEr48jfoP4GLHy68Dq9uukkRxKnTB3fauZ_4,308489
|
|
@@ -298,7 +298,7 @@ phoenix/server/static/assets/vendor-recharts-Bj7q9ORc.js,sha256=U0I8gAmVnd3X5EE1
|
|
|
298
298
|
phoenix/server/static/assets/vendor-shiki-RnWcZtzE.js,sha256=payARpCB4810gC7J5exnbQWbipfhNtukzQfszI8r2fw,8980328
|
|
299
299
|
phoenix/server/static/assets/vendor-three-DwGkEfCM.js,sha256=0D12ZgKzfKCTSdSTKJBFR2RZO_xxeMXrqDp0AszZqHY,620972
|
|
300
300
|
phoenix/server/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
301
|
-
phoenix/server/templates/index.html,sha256=
|
|
301
|
+
phoenix/server/templates/index.html,sha256=e8_jdi7Eo19SK7DI_gglkTW094D17E0VAegoMmmmvIc,4330
|
|
302
302
|
phoenix/session/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
303
303
|
phoenix/session/client.py,sha256=jGc-jQuFUPdJc4AGcPPkVbnw7Qui8Lm7V6fjPntxkzo,35330
|
|
304
304
|
phoenix/session/data_extractor.py,sha256=Y0RzYFaNy9fQj8PEIeQ76TBZ90_E1FW7bXu3K5x0EZY,2782
|
|
@@ -336,9 +336,9 @@ phoenix/utilities/project.py,sha256=auVpARXkDb-JgeX5f2aStyFIkeKvGwN9l7qrFeJMVxI,
|
|
|
336
336
|
phoenix/utilities/re.py,sha256=x8Xbk-Wa6qDMAtUd_7JtZvKtrYEuMY-bchB0n163_5c,2006
|
|
337
337
|
phoenix/utilities/span_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
338
338
|
phoenix/utilities/template_formatters.py,sha256=gh9PJD6WEGw7TEYXfSst1UR4pWWwmjxMLrDVQ_CkpkQ,2779
|
|
339
|
-
arize_phoenix-7.
|
|
340
|
-
arize_phoenix-7.
|
|
341
|
-
arize_phoenix-7.
|
|
342
|
-
arize_phoenix-7.
|
|
343
|
-
arize_phoenix-7.
|
|
344
|
-
arize_phoenix-7.
|
|
339
|
+
arize_phoenix-7.3.0.dist-info/METADATA,sha256=mT9yXI8m-65eAKN_h3azUy4mlMDo3-DxCG_7bKs0jrk,23052
|
|
340
|
+
arize_phoenix-7.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
341
|
+
arize_phoenix-7.3.0.dist-info/entry_points.txt,sha256=Pgpn8Upxx9P8z8joPXZWl2LlnAlGc3gcQoVchb06X1Q,94
|
|
342
|
+
arize_phoenix-7.3.0.dist-info/licenses/IP_NOTICE,sha256=JBqyyCYYxGDfzQ0TtsQgjts41IJoa-hiwDrBjCb9gHM,469
|
|
343
|
+
arize_phoenix-7.3.0.dist-info/licenses/LICENSE,sha256=HFkW9REuMOkvKRACuwLPT0hRydHb3zNg-fdFt94td18,3794
|
|
344
|
+
arize_phoenix-7.3.0.dist-info/RECORD,,
|
|
@@ -31,8 +31,8 @@ class SessionIODataLoader(DataLoader[Key, Result]):
|
|
|
31
31
|
)
|
|
32
32
|
if self._kind == "first_input":
|
|
33
33
|
stmt = stmt.add_columns(
|
|
34
|
-
models.Span.attributes[INPUT_VALUE].label("value"),
|
|
35
|
-
models.Span.attributes[INPUT_MIME_TYPE].label("mime_type"),
|
|
34
|
+
models.Span.attributes[INPUT_VALUE].as_string().label("value"),
|
|
35
|
+
models.Span.attributes[INPUT_MIME_TYPE].as_string().label("mime_type"),
|
|
36
36
|
func.row_number()
|
|
37
37
|
.over(
|
|
38
38
|
partition_by=models.Trace.project_session_rowid,
|
|
@@ -42,8 +42,8 @@ class SessionIODataLoader(DataLoader[Key, Result]):
|
|
|
42
42
|
)
|
|
43
43
|
elif self._kind == "last_output":
|
|
44
44
|
stmt = stmt.add_columns(
|
|
45
|
-
models.Span.attributes[OUTPUT_VALUE].label("value"),
|
|
46
|
-
models.Span.attributes[OUTPUT_MIME_TYPE].label("mime_type"),
|
|
45
|
+
models.Span.attributes[OUTPUT_VALUE].as_string().label("value"),
|
|
46
|
+
models.Span.attributes[OUTPUT_MIME_TYPE].as_string().label("mime_type"),
|
|
47
47
|
func.row_number()
|
|
48
48
|
.over(
|
|
49
49
|
partition_by=models.Trace.project_session_rowid,
|
|
@@ -57,7 +57,11 @@ class SessionIODataLoader(DataLoader[Key, Result]):
|
|
|
57
57
|
|
|
58
58
|
def _stmt(self, *keys: Key) -> Select[tuple[int, str, str]]:
|
|
59
59
|
subq = self._subq.where(models.Trace.project_session_rowid.in_(keys)).subquery()
|
|
60
|
-
return
|
|
60
|
+
return (
|
|
61
|
+
select(subq.c.id_, subq.c.value, subq.c.mime_type)
|
|
62
|
+
.filter_by(rank=1)
|
|
63
|
+
.where(subq.c.value.isnot(None))
|
|
64
|
+
)
|
|
61
65
|
|
|
62
66
|
async def _load_fn(self, keys: list[Key]) -> list[Result]:
|
|
63
67
|
async with self._db() as session:
|
|
@@ -476,10 +476,12 @@ class OpenAIStreamingClient(PlaygroundStreamingClient):
|
|
|
476
476
|
@register_llm_client(
|
|
477
477
|
provider_key=GenerativeProviderKey.OPENAI,
|
|
478
478
|
model_names=[
|
|
479
|
-
"o1
|
|
480
|
-
"o1-
|
|
479
|
+
"o1",
|
|
480
|
+
"o1-2024-12-17",
|
|
481
481
|
"o1-mini",
|
|
482
482
|
"o1-mini-2024-09-12",
|
|
483
|
+
"o1-preview",
|
|
484
|
+
"o1-preview-2024-09-12",
|
|
483
485
|
],
|
|
484
486
|
)
|
|
485
487
|
class OpenAIO1StreamingClient(OpenAIStreamingClient):
|
|
@@ -501,6 +503,11 @@ class OpenAIO1StreamingClient(OpenAIStreamingClient):
|
|
|
501
503
|
label="Tool Choice",
|
|
502
504
|
canonical_name=CanonicalParameterName.TOOL_CHOICE,
|
|
503
505
|
),
|
|
506
|
+
JSONInvocationParameter(
|
|
507
|
+
invocation_name="response_format",
|
|
508
|
+
label="Response Format",
|
|
509
|
+
canonical_name=CanonicalParameterName.RESPONSE_FORMAT,
|
|
510
|
+
),
|
|
504
511
|
]
|
|
505
512
|
|
|
506
513
|
def to_openai_chat_completion_param(
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-CTfaHD1U.js": {
|
|
3
|
+
"file": "assets/components-CTfaHD1U.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
6
|
"_vendor-DwOx_a-2.js",
|
|
7
|
-
"_pages-
|
|
7
|
+
"_pages-B-fbd0DU.js",
|
|
8
8
|
"_vendor-arizeai-BWSsCZNG.js",
|
|
9
9
|
"_vendor-codemirror-WrxmCiOZ.js",
|
|
10
10
|
"_vendor-three-DwGkEfCM.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-B-fbd0DU.js": {
|
|
14
|
+
"file": "assets/pages-B-fbd0DU.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
17
|
"_vendor-DwOx_a-2.js",
|
|
18
18
|
"_vendor-arizeai-BWSsCZNG.js",
|
|
19
|
-
"_components-
|
|
19
|
+
"_components-CTfaHD1U.js",
|
|
20
20
|
"_vendor-codemirror-WrxmCiOZ.js",
|
|
21
21
|
"_vendor-recharts-Bj7q9ORc.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-Lokew6Qd.js",
|
|
73
73
|
"name": "index",
|
|
74
74
|
"src": "index.tsx",
|
|
75
75
|
"isEntry": true,
|
|
76
76
|
"imports": [
|
|
77
77
|
"_vendor-DwOx_a-2.js",
|
|
78
78
|
"_vendor-arizeai-BWSsCZNG.js",
|
|
79
|
-
"_pages-
|
|
80
|
-
"_components-
|
|
79
|
+
"_pages-B-fbd0DU.js",
|
|
80
|
+
"_components-CTfaHD1U.js",
|
|
81
81
|
"_vendor-three-DwGkEfCM.js",
|
|
82
82
|
"_vendor-codemirror-WrxmCiOZ.js",
|
|
83
83
|
"_vendor-shiki-RnWcZtzE.js",
|