arize-phoenix 10.14.0__py3-none-any.whl → 10.15.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-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/METADATA +2 -1
- {arize_phoenix-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/RECORD +22 -21
- phoenix/db/types/model_provider.py +1 -0
- phoenix/server/api/helpers/playground_clients.py +459 -0
- phoenix/server/api/helpers/prompts/conversions/aws.py +83 -0
- phoenix/server/api/helpers/prompts/models.py +67 -0
- phoenix/server/api/input_types/GenerativeModelInput.py +2 -0
- phoenix/server/api/types/GenerativeProvider.py +33 -20
- phoenix/server/static/.vite/manifest.json +36 -36
- phoenix/server/static/assets/{components-CUUWyAMo.js → components-SpUMF1qV.js} +257 -257
- phoenix/server/static/assets/{index-qiubV_74.js → index-DIlhmbjB.js} +3 -3
- phoenix/server/static/assets/{pages-C4V07ozl.js → pages-YX47cEoQ.js} +363 -363
- phoenix/server/static/assets/{vendor-Bfsiga8H.js → vendor-DCZoBorz.js} +1 -1
- phoenix/server/static/assets/{vendor-arizeai-CQOWsrzm.js → vendor-arizeai-Ckci3irT.js} +1 -1
- phoenix/server/static/assets/{vendor-codemirror-CrcGVhB2.js → vendor-codemirror-BODM513D.js} +1 -1
- phoenix/server/static/assets/{vendor-recharts-Yyg3G-Rq.js → vendor-recharts-C9O2a-N3.js} +1 -1
- phoenix/server/static/assets/{vendor-shiki-OPjag7Hm.js → vendor-shiki-Dq54rRC7.js} +1 -1
- phoenix/version.py +1 -1
- {arize_phoenix-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/WHEEL +0 -0
- {arize_phoenix-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/entry_points.txt +0 -0
- {arize_phoenix-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/licenses/IP_NOTICE +0 -0
- {arize_phoenix-10.14.0.dist-info → arize_phoenix-10.15.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -9,6 +9,7 @@ from typing_extensions import Annotated, Self, TypeAlias, TypeGuard, assert_neve
|
|
|
9
9
|
from phoenix.db.types.db_models import UNDEFINED, DBBaseModel
|
|
10
10
|
from phoenix.db.types.model_provider import ModelProvider
|
|
11
11
|
from phoenix.server.api.helpers.prompts.conversions.anthropic import AnthropicToolChoiceConversion
|
|
12
|
+
from phoenix.server.api.helpers.prompts.conversions.aws import AwsToolChoiceConversion
|
|
12
13
|
from phoenix.server.api.helpers.prompts.conversions.openai import OpenAIToolChoiceConversion
|
|
13
14
|
|
|
14
15
|
JSONSerializable = Union[None, bool, int, float, str, dict[str, Any], list[Any]]
|
|
@@ -312,6 +313,14 @@ class AnthropicToolDefinition(DBBaseModel):
|
|
|
312
313
|
description: str = UNDEFINED
|
|
313
314
|
|
|
314
315
|
|
|
316
|
+
class BedrockToolDefinition(DBBaseModel):
|
|
317
|
+
"""
|
|
318
|
+
Based on https://github.com/aws/amazon-bedrock-sdk-python/blob/main/src/bedrock/types/tool_param.py#L12
|
|
319
|
+
"""
|
|
320
|
+
|
|
321
|
+
toolSpec: dict[str, Any]
|
|
322
|
+
|
|
323
|
+
|
|
315
324
|
class PromptOpenAIInvocationParametersContent(DBBaseModel):
|
|
316
325
|
temperature: float = UNDEFINED
|
|
317
326
|
max_tokens: int = UNDEFINED
|
|
@@ -397,6 +406,17 @@ class PromptAnthropicInvocationParameters(DBBaseModel):
|
|
|
397
406
|
anthropic: PromptAnthropicInvocationParametersContent
|
|
398
407
|
|
|
399
408
|
|
|
409
|
+
class PromptAwsInvocationParametersContent(DBBaseModel):
|
|
410
|
+
max_tokens: int = UNDEFINED
|
|
411
|
+
temperature: float = UNDEFINED
|
|
412
|
+
top_p: float = UNDEFINED
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
class PromptAwsInvocationParameters(DBBaseModel):
|
|
416
|
+
type: Literal["aws"]
|
|
417
|
+
aws: PromptAwsInvocationParametersContent
|
|
418
|
+
|
|
419
|
+
|
|
400
420
|
class PromptGoogleInvocationParametersContent(DBBaseModel):
|
|
401
421
|
temperature: float = UNDEFINED
|
|
402
422
|
max_output_tokens: int = UNDEFINED
|
|
@@ -421,6 +441,7 @@ PromptInvocationParameters: TypeAlias = Annotated[
|
|
|
421
441
|
PromptDeepSeekInvocationParameters,
|
|
422
442
|
PromptXAIInvocationParameters,
|
|
423
443
|
PromptOllamaInvocationParameters,
|
|
444
|
+
PromptAwsInvocationParameters,
|
|
424
445
|
],
|
|
425
446
|
Field(..., discriminator="type"),
|
|
426
447
|
]
|
|
@@ -443,6 +464,8 @@ def get_raw_invocation_parameters(
|
|
|
443
464
|
return invocation_parameters.xai.model_dump()
|
|
444
465
|
if isinstance(invocation_parameters, PromptOllamaInvocationParameters):
|
|
445
466
|
return invocation_parameters.ollama.model_dump()
|
|
467
|
+
if isinstance(invocation_parameters, PromptAwsInvocationParameters):
|
|
468
|
+
return invocation_parameters.aws.model_dump()
|
|
446
469
|
assert_never(invocation_parameters)
|
|
447
470
|
|
|
448
471
|
|
|
@@ -459,6 +482,7 @@ def is_prompt_invocation_parameters(
|
|
|
459
482
|
PromptDeepSeekInvocationParameters,
|
|
460
483
|
PromptXAIInvocationParameters,
|
|
461
484
|
PromptOllamaInvocationParameters,
|
|
485
|
+
PromptAwsInvocationParameters,
|
|
462
486
|
),
|
|
463
487
|
)
|
|
464
488
|
|
|
@@ -512,6 +536,11 @@ def validate_invocation_parameters(
|
|
|
512
536
|
type="ollama",
|
|
513
537
|
ollama=PromptOllamaInvocationParametersContent.model_validate(invocation_parameters),
|
|
514
538
|
)
|
|
539
|
+
elif model_provider is ModelProvider.AWS:
|
|
540
|
+
return PromptAwsInvocationParameters(
|
|
541
|
+
type="aws",
|
|
542
|
+
aws=PromptAwsInvocationParametersContent.model_validate(invocation_parameters),
|
|
543
|
+
)
|
|
515
544
|
assert_never(model_provider)
|
|
516
545
|
|
|
517
546
|
|
|
@@ -530,12 +559,16 @@ def normalize_tools(
|
|
|
530
559
|
):
|
|
531
560
|
openai_tools = [OpenAIToolDefinition.model_validate(schema) for schema in schemas]
|
|
532
561
|
tools = [_openai_to_prompt_tool(openai_tool) for openai_tool in openai_tools]
|
|
562
|
+
elif model_provider is ModelProvider.AWS:
|
|
563
|
+
bedrock_tools = [BedrockToolDefinition.model_validate(schema) for schema in schemas]
|
|
564
|
+
tools = [_bedrock_to_prompt_tool(bedrock_tool) for bedrock_tool in bedrock_tools]
|
|
533
565
|
elif model_provider is ModelProvider.ANTHROPIC:
|
|
534
566
|
anthropic_tools = [AnthropicToolDefinition.model_validate(schema) for schema in schemas]
|
|
535
567
|
tools = [_anthropic_to_prompt_tool(anthropic_tool) for anthropic_tool in anthropic_tools]
|
|
536
568
|
else:
|
|
537
569
|
raise ValueError(f"Unsupported model provider: {model_provider}")
|
|
538
570
|
ans = PromptTools(type="tools", tools=tools)
|
|
571
|
+
|
|
539
572
|
if tool_choice is not None:
|
|
540
573
|
if (
|
|
541
574
|
model_provider is ModelProvider.OPENAI
|
|
@@ -545,6 +578,8 @@ def normalize_tools(
|
|
|
545
578
|
or model_provider is ModelProvider.OLLAMA
|
|
546
579
|
):
|
|
547
580
|
ans.tool_choice = OpenAIToolChoiceConversion.from_openai(tool_choice) # type: ignore[arg-type]
|
|
581
|
+
elif model_provider is ModelProvider.AWS:
|
|
582
|
+
ans.tool_choice = AwsToolChoiceConversion.from_aws(tool_choice) # type: ignore[arg-type]
|
|
548
583
|
elif model_provider is ModelProvider.ANTHROPIC:
|
|
549
584
|
choice, disable_parallel_tool_calls = AnthropicToolChoiceConversion.from_anthropic(
|
|
550
585
|
tool_choice # type: ignore[arg-type]
|
|
@@ -571,6 +606,10 @@ def denormalize_tools(
|
|
|
571
606
|
denormalized_tools = [_prompt_to_openai_tool(tool) for tool in tools.tools]
|
|
572
607
|
if tools.tool_choice:
|
|
573
608
|
tool_choice = OpenAIToolChoiceConversion.to_openai(tools.tool_choice)
|
|
609
|
+
elif model_provider is ModelProvider.AWS:
|
|
610
|
+
denormalized_tools = [_prompt_to_bedrock_tool(tool) for tool in tools.tools]
|
|
611
|
+
if tools.tool_choice:
|
|
612
|
+
tool_choice = OpenAIToolChoiceConversion.to_openai(tools.tool_choice)
|
|
574
613
|
elif model_provider is ModelProvider.ANTHROPIC:
|
|
575
614
|
denormalized_tools = [_prompt_to_anthropic_tool(tool) for tool in tools.tools]
|
|
576
615
|
if tools.tool_choice and tools.tool_choice.type != "none":
|
|
@@ -614,6 +653,19 @@ def _prompt_to_openai_tool(
|
|
|
614
653
|
)
|
|
615
654
|
|
|
616
655
|
|
|
656
|
+
def _bedrock_to_prompt_tool(
|
|
657
|
+
tool: BedrockToolDefinition,
|
|
658
|
+
) -> PromptToolFunction:
|
|
659
|
+
return PromptToolFunction(
|
|
660
|
+
type="function",
|
|
661
|
+
function=PromptToolFunctionDefinition(
|
|
662
|
+
name=tool.toolSpec["name"],
|
|
663
|
+
description=tool.toolSpec["description"],
|
|
664
|
+
parameters=tool.toolSpec["inputSchema"]["json"],
|
|
665
|
+
),
|
|
666
|
+
)
|
|
667
|
+
|
|
668
|
+
|
|
617
669
|
def _anthropic_to_prompt_tool(
|
|
618
670
|
tool: AnthropicToolDefinition,
|
|
619
671
|
) -> PromptToolFunction:
|
|
@@ -636,3 +688,18 @@ def _prompt_to_anthropic_tool(
|
|
|
636
688
|
name=function.name,
|
|
637
689
|
description=function.description,
|
|
638
690
|
)
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
def _prompt_to_bedrock_tool(
|
|
694
|
+
tool: PromptToolFunction,
|
|
695
|
+
) -> BedrockToolDefinition:
|
|
696
|
+
function = tool.function
|
|
697
|
+
return BedrockToolDefinition(
|
|
698
|
+
toolSpec={
|
|
699
|
+
"name": function.name,
|
|
700
|
+
"description": function.description,
|
|
701
|
+
"inputSchema": {
|
|
702
|
+
"json": function.parameters,
|
|
703
|
+
},
|
|
704
|
+
}
|
|
705
|
+
)
|
|
@@ -17,3 +17,5 @@ class GenerativeModelInput:
|
|
|
17
17
|
""" The endpoint to use for the model. Only required for Azure OpenAI models. """
|
|
18
18
|
api_version: Optional[str] = UNSET
|
|
19
19
|
""" The API version to use for the model. """
|
|
20
|
+
region: Optional[str] = UNSET
|
|
21
|
+
""" The region to use for the model. """
|
|
@@ -17,6 +17,7 @@ class GenerativeProviderKey(Enum):
|
|
|
17
17
|
DEEPSEEK = "DeepSeek"
|
|
18
18
|
XAI = "xAI"
|
|
19
19
|
OLLAMA = "Ollama"
|
|
20
|
+
AWS = "AWS Bedrock"
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
@strawberry.type
|
|
@@ -38,6 +39,7 @@ class GenerativeProvider:
|
|
|
38
39
|
GenerativeProviderKey.DEEPSEEK: ["deepseek"],
|
|
39
40
|
GenerativeProviderKey.XAI: ["grok"],
|
|
40
41
|
GenerativeProviderKey.OLLAMA: ["llama", "mistral", "codellama", "phi", "qwen", "gemma"],
|
|
42
|
+
GenerativeProviderKey.AWS: ["nova", "titan"],
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
attribute_provider_to_generative_provider_map: ClassVar[dict[str, GenerativeProviderKey]] = {
|
|
@@ -45,6 +47,7 @@ class GenerativeProvider:
|
|
|
45
47
|
OpenInferenceLLMProviderValues.ANTHROPIC.value: GenerativeProviderKey.ANTHROPIC,
|
|
46
48
|
OpenInferenceLLMProviderValues.AZURE.value: GenerativeProviderKey.AZURE_OPENAI,
|
|
47
49
|
OpenInferenceLLMProviderValues.GOOGLE.value: GenerativeProviderKey.GOOGLE,
|
|
50
|
+
OpenInferenceLLMProviderValues.AWS.value: GenerativeProviderKey.AWS,
|
|
48
51
|
# Note: DeepSeek uses OpenAI compatibility but we can't duplicate the key in the dict
|
|
49
52
|
# The provider will be determined through model name prefix matching instead
|
|
50
53
|
# Note: xAI uses OpenAI compatibility but we can't duplicate the key in the dict
|
|
@@ -58,26 +61,36 @@ class GenerativeProvider:
|
|
|
58
61
|
E.x. OpenAI requires a single API key
|
|
59
62
|
"""
|
|
60
63
|
model_provider_to_credential_requirements_map: ClassVar[
|
|
61
|
-
dict[GenerativeProviderKey, GenerativeProviderCredentialConfig]
|
|
64
|
+
dict[GenerativeProviderKey, list[GenerativeProviderCredentialConfig]]
|
|
62
65
|
] = {
|
|
63
|
-
GenerativeProviderKey.AZURE_OPENAI:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
66
|
+
GenerativeProviderKey.AZURE_OPENAI: [
|
|
67
|
+
GenerativeProviderCredentialConfig(
|
|
68
|
+
env_var_name="AZURE_OPENAI_API_KEY", is_required=True
|
|
69
|
+
)
|
|
70
|
+
],
|
|
71
|
+
GenerativeProviderKey.ANTHROPIC: [
|
|
72
|
+
GenerativeProviderCredentialConfig(env_var_name="ANTHROPIC_API_KEY", is_required=True)
|
|
73
|
+
],
|
|
74
|
+
GenerativeProviderKey.OPENAI: [
|
|
75
|
+
GenerativeProviderCredentialConfig(env_var_name="OPENAI_API_KEY", is_required=True)
|
|
76
|
+
],
|
|
77
|
+
GenerativeProviderKey.GOOGLE: [
|
|
78
|
+
GenerativeProviderCredentialConfig(env_var_name="GEMINI_API_KEY", is_required=True)
|
|
79
|
+
],
|
|
80
|
+
GenerativeProviderKey.DEEPSEEK: [
|
|
81
|
+
GenerativeProviderCredentialConfig(env_var_name="DEEPSEEK_API_KEY", is_required=True)
|
|
82
|
+
],
|
|
83
|
+
GenerativeProviderKey.XAI: [
|
|
84
|
+
GenerativeProviderCredentialConfig(env_var_name="XAI_API_KEY", is_required=True)
|
|
85
|
+
],
|
|
86
|
+
GenerativeProviderKey.OLLAMA: [],
|
|
87
|
+
GenerativeProviderKey.AWS: [
|
|
88
|
+
GenerativeProviderCredentialConfig(env_var_name="AWS_ACCESS_KEY_ID", is_required=True),
|
|
89
|
+
GenerativeProviderCredentialConfig(
|
|
90
|
+
env_var_name="AWS_SECRET_ACCESS_KEY", is_required=True
|
|
91
|
+
),
|
|
92
|
+
GenerativeProviderCredentialConfig(env_var_name="AWS_SESSION_TOKEN", is_required=False),
|
|
93
|
+
],
|
|
81
94
|
}
|
|
82
95
|
|
|
83
96
|
@strawberry.field
|
|
@@ -110,7 +123,7 @@ class GenerativeProvider:
|
|
|
110
123
|
credential_requirements = self.model_provider_to_credential_requirements_map.get(self.key)
|
|
111
124
|
if credential_requirements is None:
|
|
112
125
|
return []
|
|
113
|
-
return [
|
|
126
|
+
return self.model_provider_to_credential_requirements_map[self.key]
|
|
114
127
|
|
|
115
128
|
@strawberry.field(description="Whether the credentials are set on the server for the provider") # type: ignore
|
|
116
129
|
async def credentials_set(self) -> bool:
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_components-
|
|
3
|
-
"file": "assets/components-
|
|
2
|
+
"_components-SpUMF1qV.js": {
|
|
3
|
+
"file": "assets/components-SpUMF1qV.js",
|
|
4
4
|
"name": "components",
|
|
5
5
|
"imports": [
|
|
6
|
-
"_vendor-
|
|
7
|
-
"_pages-
|
|
8
|
-
"_vendor-arizeai-
|
|
9
|
-
"_vendor-codemirror-
|
|
6
|
+
"_vendor-DCZoBorz.js",
|
|
7
|
+
"_pages-YX47cEoQ.js",
|
|
8
|
+
"_vendor-arizeai-Ckci3irT.js",
|
|
9
|
+
"_vendor-codemirror-BODM513D.js",
|
|
10
10
|
"_vendor-three-C5WAXd5r.js"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
-
"_pages-
|
|
14
|
-
"file": "assets/pages-
|
|
13
|
+
"_pages-YX47cEoQ.js": {
|
|
14
|
+
"file": "assets/pages-YX47cEoQ.js",
|
|
15
15
|
"name": "pages",
|
|
16
16
|
"imports": [
|
|
17
|
-
"_vendor-
|
|
18
|
-
"_vendor-arizeai-
|
|
19
|
-
"_components-
|
|
20
|
-
"_vendor-codemirror-
|
|
21
|
-
"_vendor-recharts-
|
|
17
|
+
"_vendor-DCZoBorz.js",
|
|
18
|
+
"_vendor-arizeai-Ckci3irT.js",
|
|
19
|
+
"_components-SpUMF1qV.js",
|
|
20
|
+
"_vendor-codemirror-BODM513D.js",
|
|
21
|
+
"_vendor-recharts-C9O2a-N3.js"
|
|
22
22
|
]
|
|
23
23
|
},
|
|
24
|
-
"_vendor-
|
|
25
|
-
"file": "assets/vendor-
|
|
24
|
+
"_vendor-DCZoBorz.js": {
|
|
25
|
+
"file": "assets/vendor-DCZoBorz.js",
|
|
26
26
|
"name": "vendor",
|
|
27
27
|
"imports": [
|
|
28
28
|
"_vendor-three-C5WAXd5r.js"
|
|
@@ -35,33 +35,33 @@
|
|
|
35
35
|
"file": "assets/vendor-WIZid84E.css",
|
|
36
36
|
"src": "_vendor-WIZid84E.css"
|
|
37
37
|
},
|
|
38
|
-
"_vendor-arizeai-
|
|
39
|
-
"file": "assets/vendor-arizeai-
|
|
38
|
+
"_vendor-arizeai-Ckci3irT.js": {
|
|
39
|
+
"file": "assets/vendor-arizeai-Ckci3irT.js",
|
|
40
40
|
"name": "vendor-arizeai",
|
|
41
41
|
"imports": [
|
|
42
|
-
"_vendor-
|
|
42
|
+
"_vendor-DCZoBorz.js"
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
|
-
"_vendor-codemirror-
|
|
46
|
-
"file": "assets/vendor-codemirror-
|
|
45
|
+
"_vendor-codemirror-BODM513D.js": {
|
|
46
|
+
"file": "assets/vendor-codemirror-BODM513D.js",
|
|
47
47
|
"name": "vendor-codemirror",
|
|
48
48
|
"imports": [
|
|
49
|
-
"_vendor-
|
|
50
|
-
"_vendor-shiki-
|
|
49
|
+
"_vendor-DCZoBorz.js",
|
|
50
|
+
"_vendor-shiki-Dq54rRC7.js"
|
|
51
51
|
]
|
|
52
52
|
},
|
|
53
|
-
"_vendor-recharts-
|
|
54
|
-
"file": "assets/vendor-recharts-
|
|
53
|
+
"_vendor-recharts-C9O2a-N3.js": {
|
|
54
|
+
"file": "assets/vendor-recharts-C9O2a-N3.js",
|
|
55
55
|
"name": "vendor-recharts",
|
|
56
56
|
"imports": [
|
|
57
|
-
"_vendor-
|
|
57
|
+
"_vendor-DCZoBorz.js"
|
|
58
58
|
]
|
|
59
59
|
},
|
|
60
|
-
"_vendor-shiki-
|
|
61
|
-
"file": "assets/vendor-shiki-
|
|
60
|
+
"_vendor-shiki-Dq54rRC7.js": {
|
|
61
|
+
"file": "assets/vendor-shiki-Dq54rRC7.js",
|
|
62
62
|
"name": "vendor-shiki",
|
|
63
63
|
"imports": [
|
|
64
|
-
"_vendor-
|
|
64
|
+
"_vendor-DCZoBorz.js"
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"_vendor-three-C5WAXd5r.js": {
|
|
@@ -69,19 +69,19 @@
|
|
|
69
69
|
"name": "vendor-three"
|
|
70
70
|
},
|
|
71
71
|
"index.tsx": {
|
|
72
|
-
"file": "assets/index-
|
|
72
|
+
"file": "assets/index-DIlhmbjB.js",
|
|
73
73
|
"name": "index",
|
|
74
74
|
"src": "index.tsx",
|
|
75
75
|
"isEntry": true,
|
|
76
76
|
"imports": [
|
|
77
|
-
"_vendor-
|
|
78
|
-
"_vendor-arizeai-
|
|
79
|
-
"_pages-
|
|
80
|
-
"_components-
|
|
77
|
+
"_vendor-DCZoBorz.js",
|
|
78
|
+
"_vendor-arizeai-Ckci3irT.js",
|
|
79
|
+
"_pages-YX47cEoQ.js",
|
|
80
|
+
"_components-SpUMF1qV.js",
|
|
81
81
|
"_vendor-three-C5WAXd5r.js",
|
|
82
|
-
"_vendor-codemirror-
|
|
83
|
-
"_vendor-shiki-
|
|
84
|
-
"_vendor-recharts-
|
|
82
|
+
"_vendor-codemirror-BODM513D.js",
|
|
83
|
+
"_vendor-shiki-Dq54rRC7.js",
|
|
84
|
+
"_vendor-recharts-C9O2a-N3.js"
|
|
85
85
|
]
|
|
86
86
|
}
|
|
87
87
|
}
|