@cozeloop/loop-lng 0.0.3 → 0.0.4
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.
- package/dist/index.js +5 -2
- package/dist/locales/app/en-US.json +3 -0
- package/dist/locales/app/zh-CN.json +3 -0
- package/dist/locales/base/en-US.json +0 -1
- package/dist/locales/base/zh-CN.json +0 -1
- package/dist/locales/common/en-US.json +44 -0
- package/dist/locales/common/zh-CN.json +44 -0
- package/dist/locales/components/en-US.json +97 -1
- package/dist/locales/components/zh-CN.json +96 -0
- package/dist/locales/evaluate/en-US.json +171 -134
- package/dist/locales/evaluate/zh-CN.json +136 -99
- package/dist/locales/model/en-US.json +26 -0
- package/dist/locales/model/zh-CN.json +26 -0
- package/dist/locales/observation/en-US.json +156 -36
- package/dist/locales/observation/zh-CN.json +156 -36
- package/dist/locales/prompt/en-US.json +17 -20
- package/dist/locales/prompt/zh-CN.json +17 -20
- package/dist/locales/tag/en-US.json +5 -7
- package/dist/locales/tag/zh-CN.json +2 -4
- package/package.json +1 -1
- package/dist/index.js.map +0 -1
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"draft_auto_saved_in": "The draft has been automatically saved in ",
|
|
34
34
|
"draft_saving": "Draft is being saved...",
|
|
35
35
|
"edit_placeholder": "Edit Placeholder",
|
|
36
|
-
"edit_prompt": "Edit
|
|
36
|
+
"edit_prompt": "Edit prompt",
|
|
37
37
|
"enable_function": "Enable",
|
|
38
38
|
"enter_free_comparison_mode": "Comparison mode",
|
|
39
39
|
"exit_free_comparison_mode": "Exit the free comparison mode",
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"fornax_prompt_current_status": "Current status:",
|
|
43
43
|
"fornax_prompt_disable_model_func_google_on": "After enabling Google search, the model's function capabilities will be disabled",
|
|
44
44
|
"fornax_prompt_documentation": "Documentation",
|
|
45
|
-
"fornax_prompt_enable": "Enable",
|
|
46
45
|
"fornax_prompt_fps_influence_on_video_understanding_and_token_usage": "The higher the FPS, the more detailed the video understanding and the greater the token usage.",
|
|
47
46
|
"fornax_prompt_frame_extraction_config": "Frame Extraction Configuration",
|
|
48
47
|
"fornax_prompt_manual_config_video_sample_params": "Manually configure video variable sampling parameters, see details at",
|
|
@@ -62,7 +61,7 @@
|
|
|
62
61
|
"input_question_tip": "Please enter a question to test the large language model's response. Press Enter to send, and Shift+Enter for a new line.",
|
|
63
62
|
"input_version_number": "Please enter the version number in the format a.b.c, where each segment ranges from 0 to 9999.",
|
|
64
63
|
"insert_template": "Insert template",
|
|
65
|
-
"insert_variable": "
|
|
64
|
+
"insert_variable": "insert variable",
|
|
66
65
|
"load_more": "Load more",
|
|
67
66
|
"max_tokens": "Max tokens",
|
|
68
67
|
"max_upload_picture_num": "Upload a maximum of {num} pictures.",
|
|
@@ -97,7 +96,6 @@
|
|
|
97
96
|
"placeholder_var_name": "Placeholder variable name",
|
|
98
97
|
"please_input_with_vars": "Please enter content and use variables such as '{{USER_NAME}}",
|
|
99
98
|
"presence_penalty": "Presence penalty",
|
|
100
|
-
"preview_and_debug": "Preview and Debug",
|
|
101
99
|
"prompt_add_function": "Add function",
|
|
102
100
|
"prompt_add_multi_modal_variable": "Add multi-modal variable",
|
|
103
101
|
"prompt_add_new_multi_modal_variable": "Add new multi-modal variable",
|
|
@@ -109,7 +107,7 @@
|
|
|
109
107
|
"prompt_being_deprecated": "Being deprecated",
|
|
110
108
|
"prompt_blank_prompt": "Blank Prompt",
|
|
111
109
|
"prompt_call_records": "Call records",
|
|
112
|
-
"prompt_call_stream": "
|
|
110
|
+
"prompt_call_stream": "import (\n \"context\"\n \"errors\"\n \"io\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/chatmodel\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt/execution\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n\n streamReader, err := fornaxClient.StreamExecutePromptLocal(ctx, &execution.ExecutePromptLocalParam{\n PromptKey: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinja2/GO template 类型的模板支持在any里传递对象\n Variables: map[string]any{\n \"role\": \"旅行\",\n \"holiday_name\": \"元旦\",\n \"recomm_num\": 3,\n },\n // 可选,传递历史历史消息上下文列表和最新的用户消息\n ChatMessages: []*chatmodel.ChatMessage{\n {\n Role: chatmodel.RoleTypeUser,\n Content: \"推荐一点冬天相关的景点\",\n },\n },\n }) // 更复杂的使用场景请参考接入手册\n\n if err != nil {\n logs.CtxError(ctx, \"ExecutePromptLocal error: %v\", err)\n panic(err)\n }\n\n for {\n resp, err := streamReader.Recv(context.Background())\n if errors.Is(err, io.EOF) {\n break\n }\n if err != nil {\n logs.CtxError(ctx, \"StreamExecutePromptLocal recv error: %v\", err)\n return\n }\n logs.CtxInfo(ctx, resp.Choices[0].Delta.Content)\n }\n}",
|
|
113
111
|
"prompt_cannot_add_check_form_data": "Cannot add, please check form data",
|
|
114
112
|
"prompt_cannot_delete_snippet_variables": "Only variables inside Prompt can be deleted; variables in snippets cannot be deleted",
|
|
115
113
|
"prompt_case_sensitive": "Case sensitive",
|
|
@@ -243,9 +241,9 @@
|
|
|
243
241
|
"prompt_prompt_snippet_nesting_support": "Prompt snippets can be nested and reused in different Prompt Templates",
|
|
244
242
|
"prompt_prompt_snippet_reuse_support": "Prompt snippets support reuse in different Prompt Templates",
|
|
245
243
|
"prompt_prompt_submit": "Submit Prompt",
|
|
246
|
-
"prompt_prompthub_features_and_integration": "PromptHub
|
|
244
|
+
"prompt_prompthub_features_and_integration": "PromptHub: The business side can pull the Prompt hosted on the Fornax platform in the business service by integrating the Fornax SDK, obtain the Prompt Template details, and call the model for inference in the business service itself or integrate with the Agent framework such as Eino.",
|
|
247
245
|
"prompt_provided_by_placeholder1": "Provided by {placeholder1}",
|
|
248
|
-
"prompt_ptaas_overview_and_limitations": "PTaaS (Prompt As a Service)
|
|
246
|
+
"prompt_ptaas_overview_and_limitations": "PTaaS (Prompt As a Service) will release the hosted Prompt as a callable interface, which can be directly and quickly invoked in the business process by integrating the Fornax SDK to achieve independent iteration and tuning of Prompt. PTaaS temporarily does not support independent deployment of services for business parties, but the model invocation ability provided by the Fornax service.",
|
|
249
247
|
"prompt_reference_project": "Referencing Project",
|
|
250
248
|
"prompt_reference_snippet_prompt_version": "Referencing this snippet's Prompt version",
|
|
251
249
|
"prompt_release_successful": "Release successful",
|
|
@@ -257,9 +255,9 @@
|
|
|
257
255
|
"prompt_run_mode": "Run mode",
|
|
258
256
|
"prompt_sdk_data_reporting_and_observation": "Access SDK to report data and perform data observation",
|
|
259
257
|
"prompt_selected_tags": "Selected tags",
|
|
260
|
-
"prompt_service_call_sync": "
|
|
261
|
-
"prompt_service_config_eg": "
|
|
262
|
-
"prompt_service_install_eg": "go get
|
|
258
|
+
"prompt_service_call_sync": "import (\n \"context\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/chatmodel\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt/execution\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n\n result, err := fornaxClient.ExecutePromptLocal(ctx, &execution.ExecutePromptLocalParam{\n PromptKey: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinja2/GO template 类型的模板支持在any里传递对象\n Variables: map[string]any{\n \"role\": \"旅行\",\n \"holiday_name\": \"元旦\",\n \"recomm_num\": \"3\",\n },\n // 可选,传递历史历史消息上下文列表和最新的用户消息\n ChatMessages: []*chatmodel.ChatMessage{\n {\n Role: chatmodel.RoleTypeUser,\n Content: \"推荐一点冬天相关的景点\",\n },\n },\n }) // 更复杂的使用场景请参考接入手册\n\n if err != nil {\n logs.CtxError(ctx, \"ExecutePromptLocal error: %v\", err)\n panic(err)\n }\n\n logs.CtxInfo(ctx, result.Choices[0].Message.Content)\n}",
|
|
259
|
+
"prompt_service_config_eg": "import (\n \"context\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n getPromptResult, err := fornaxClient.GetPrompt(ctx, &prompt.GetPromptParam{\n Key: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n })\n if err != nil {\n logs.CtxError(ctx, \"GetPrompt error: %v\", err)\n panic(err)\n }\n promptObj := getPromptResult.Prompt\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinjia/GO template 类型的模板支持在any里传递对象\n messageList, err := fornaxClient.FormatPrompt(ctx, promptObj, map[string]any{\n \"role\": \"旅游\",\n \"holiday_name\": \"五一\",\n \"recomm_num\": \"3\",\n })\n // 第0个元素是systemprompt,如果托管了userprompt,第1个元素是userprompt\n for _, message := range messageList {\n logs.CtxInfo(ctx, \"role: %s,prompt:%s \\n\", message.Role, message.Content)\n }\n}",
|
|
260
|
+
"prompt_service_install_eg": "go get code.byted.org/flowdevops/fornax_sdk@latest",
|
|
263
261
|
"prompt_simulated_value_colon": "Simulated value:",
|
|
264
262
|
"prompt_single_run": "Single run",
|
|
265
263
|
"prompt_single_turn_conversation": "Single-turn Conversation",
|
|
@@ -291,14 +289,14 @@
|
|
|
291
289
|
"prompt_triple_braces_variable_recognition": "Triple braces {{{}}} recognize variables",
|
|
292
290
|
"prompt_type_change": "Type change",
|
|
293
291
|
"prompt_usage_call_title": "call configuration",
|
|
294
|
-
"prompt_use_js_configuration": "import {
|
|
295
|
-
"prompt_use_js_installation": "npm i @
|
|
296
|
-
"prompt_use_js_streaming_call": "import {
|
|
297
|
-
"prompt_use_js_synchronous_call": "import {
|
|
298
|
-
"prompt_use_python_configuration": "
|
|
299
|
-
"prompt_use_python_installation": "pip install
|
|
300
|
-
"prompt_use_python_simultaneous_call": "
|
|
301
|
-
"prompt_use_python_streaming_call": "
|
|
292
|
+
"prompt_use_js_configuration": "import { fornaxPromptHub } from '@next-ai/fornax-sdk/components';\n\nconst hub = fornaxPromptHub({\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // Control plane area, CN by default\n // region: 'CN' | 'I18N',\n});\n\nconst promptKey = 'fornax.demo.fornax_oncall';\nconst promptVersion = '0.0.3';\n\n// Preload Prompts (Optional)\nawait hub.preload({ key: promptKey, version: promptVersion });\n\n// Get Prompt & Interpolation\nconst prompt = await hub.get({\n key: promptKey,\n version: promptVersion,\n // Interpolate the variables in System/User Prompt automatically\n variables: {\n // Corresponding to {{name}} and so on\n name: 'Oncall Agent',\n context: '<The context retrieved from the knowledge base>',\n query: 'Introduce the evaluation function of the Fornax platform',\n },\n});",
|
|
293
|
+
"prompt_use_js_installation": "npm i @next-ai/fornax-sdk",
|
|
294
|
+
"prompt_use_js_streaming_call": "import { ptaas } from '@next-ai/fornax-sdk/components';\n\n// Prompt Key\nconst promptKey = 'fornax.prompt.key';\n// Initialize Prompt as a Service\nconst model = ptaas(promptKey, {\n // Fornax auth options,⚠️ which is necessary to correspond to the Prompt Key\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // Optional Initialize the model configuration.\n // It can also be passed when invoking/streaming (merged, with higher priority)\n modelConfigs: {\n // Optional The version released by Prompt, or the latest version will be used by default if it is empty.\n version: '0.0.1',\n // Optional Interpolation variables\n variables: {},\n // Optional List of independent model accounts.\n // When choosing the independent account mode, it is necessary to pass on your own independent account information.\n customAccounts: [],\n // Optional Extra request params (eg: `gptOpenApiExtra`)\n requestExtra: {\n // Optional gpt extra params\n gptOpenApiExtra: '',\n },\n },\n});\n\n// Streaming call\nconst { fullStream } = await model.stream({\n // messages / contexts\n messages: [{ role: 'user', content: 'hello' }],\n // Runtime Model Config\n modelConfigs: {},\n});\n\n// for-await iteration\nfor await (const chunk of fullStream) {\n console.info(chunk.choices[0].message.content);\n}",
|
|
295
|
+
"prompt_use_js_synchronous_call": "import { ptaas } from '@next-ai/fornax-sdk/components';\n\n// Prompt Key\nconst promptKey = 'fornax.prompt.key';\n// Initialize Prompt as a Service\nconst model = ptaas(promptKey, {\n // Fornax auth options,⚠️ which is necessary to correspond to the Prompt Key\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // Optional Initialize the model configuration.\n // It can also be passed when invoking/streaming (merged, with higher priority)\n modelConfigs: {\n // Optional The version released by Prompt, or the latest version will be used by default if it is empty.\n version: '0.0.1',\n // Optional Interpolation variables\n variables: {},\n // Optional List of independent model accounts.\n // When choosing the independent account mode, it is necessary to pass on your own independent account information.\n customAccounts: [],\n // Optional Extra request params (eg: `gptOpenApiExtra`)\n requestExtra: {\n // Optional gpt extra params\n gptOpenApiExtra: '',\n },\n },\n});\n\n// Non streaming call\nconst { choices } = await model.invoke({\n // messages / contexts\n messages: [{ role: 'user', content: 'hello' }],\n // Runtime Model Config\n modelConfigs: {},\n});\n",
|
|
296
|
+
"prompt_use_python_configuration": "from bytedance.fornax.infra import FornaxClient, initialize\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\nprompt = FornaxClient.global_fornax_client.get_fornax_prompt(\n prompt_key=\"prompt.chatcompletion.test\",\n # 不传默认为当前环境发布的最新版本\n # version=\"0.0.1\"\n)\nif prompt.prompt_text.system_prompt is not None:\n print(prompt.prompt_text.system_prompt.content)\nif prompt.prompt_text.user_prompt is not None:\n print(prompt.prompt_text.user_prompt.content)",
|
|
297
|
+
"prompt_use_python_installation": "pip install bytedance.fornax",
|
|
298
|
+
"prompt_use_python_simultaneous_call": "from bytedance.fornax.infra import FornaxClient, initialize\nfrom bytedance.fornax.infra.prompt_service import ExecutePromptParam\nfrom bytedance.fornax.infra.prompt_service.types import Message, MessageType, Variable\n\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\n# Fornax SDK执行Prompt入参\nparams = ExecutePromptParam(prompt_key=\"prompt.chatcompletion.test\",\n # 可选,替换Prompt Template里定义的变量\n variables=[Variable(key=\"name\", value=\"小娜\")],\n # 可选,历史消息上下文\n contexts=[\n Message(content=\"我叫小帅\", message_type=MessageType.USER),\n Message(content=\"你好呀\", message_type=MessageType.ASSISTANT),\n ],\n # 可选,用户当前消息\n message=Message(\n message_type=MessageType.USER,\n content=\"介绍一下你自己\",\n ),\n )\n# 非流式执行Prompt,stream=False\nresp = FornaxClient.global_fornax_client.execute_prompt(params, stream=False)\nprint(resp.item.content)",
|
|
299
|
+
"prompt_use_python_streaming_call": "from bytedance.fornax.infra import FornaxClient, initialize\nfrom bytedance.fornax.infra.prompt_service import ExecutePromptParam\nfrom bytedance.fornax.infra.prompt_service.types import Message, MessageType, Variable\n\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\n# Fornax SDK执行Prompt入参\nparams = ExecutePromptParam(prompt_key=\"prompt.chatcompletion.test\",\n # 可选,替换Prompt Template里定义的变量\n variables=[Variable(key=\"name\", value=\"小娜\")],\n # 可选,历史消息上下文\n contexts=[\n Message(content=\"我叫小帅\", message_type=MessageType.USER),\n Message(content=\"你好呀\", message_type=MessageType.ASSISTANT),\n ],\n # 可选,用户当前消息\n message=Message(\n message_type=MessageType.USER,\n content=\"介绍一下你自己\",\n ),\n )\n# 非流式执行Prompt,stream=False\nresp_stream = FornaxClient.global_fornax_client.execute_prompt(params, stream=True)\n\n# next方式读取\n# while True:\n# try:\n# chunk = next(resp_stream)\n# print(chunk.item.content)\n# except StopIteration:\n# break\n\n# for循环方式读取\nfor chunk in resp_stream:\n print(chunk.item.content)",
|
|
302
300
|
"prompt_use_sdk": "Use SDK",
|
|
303
301
|
"prompt_user_manual": "User manual",
|
|
304
302
|
"prompt_user_or_model_contains_risky_content": "User input or model output contains risky content",
|
|
@@ -311,7 +309,7 @@
|
|
|
311
309
|
"prompt_variable_name_format_rule": "Variable name format only supports letters, numbers, underscores, hyphens, and cannot start with a digit",
|
|
312
310
|
"prompt_variable_name_rule_letters_numbers_underscore": "Can only contain letters, numbers, or underscores and must start with a letter",
|
|
313
311
|
"prompt_variable_referenced_in_snippets": "This variable is referenced in {snippetNames} snippets",
|
|
314
|
-
"prompt_variable_value": "
|
|
312
|
+
"prompt_variable_value": "Prompt variable value",
|
|
315
313
|
"prompt_version_contains_first_level_nesting": "This version already contains first-level nesting",
|
|
316
314
|
"prompt_version_empty_submitted": "No version has been submitted yet",
|
|
317
315
|
"prompt_version_inconsistent_with_prompt_template": "This version is inconsistent with the current Prompt template type",
|
|
@@ -334,7 +332,6 @@
|
|
|
334
332
|
"stop_respond": "Stop responding",
|
|
335
333
|
"submission_no_version_diff": "There is no version difference in this submission.",
|
|
336
334
|
"system_role": "System",
|
|
337
|
-
"task_delete_title": "hint",
|
|
338
335
|
"time_consumed": "Time cost",
|
|
339
336
|
"top_k": "Top K",
|
|
340
337
|
"top_p": "Top P",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"draft_auto_saved_in": "草稿已自动保存于",
|
|
34
34
|
"draft_saving": "草稿保存中...",
|
|
35
35
|
"edit_placeholder": "编辑 Placeholder",
|
|
36
|
-
"edit_prompt": "
|
|
36
|
+
"edit_prompt": "编辑提示词",
|
|
37
37
|
"enable_function": "启用函数",
|
|
38
38
|
"enter_free_comparison_mode": "进入自由对比模式",
|
|
39
39
|
"exit_free_comparison_mode": "退出自由对比模式",
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"fornax_prompt_current_status": "当前状态:",
|
|
43
43
|
"fornax_prompt_disable_model_func_google_on": "开启google搜索后,模型的函数能力将被禁用",
|
|
44
44
|
"fornax_prompt_documentation": "说明文档",
|
|
45
|
-
"fornax_prompt_enable": "开启",
|
|
46
45
|
"fornax_prompt_fps_influence_on_video_understanding_and_token_usage": "FPS 越高,视频理解越精细,Token用量越大",
|
|
47
46
|
"fornax_prompt_frame_extraction_config": "抽帧配置",
|
|
48
47
|
"fornax_prompt_manual_config_video_sample_params": "手动配置视频变量采样参数,详见",
|
|
@@ -97,7 +96,6 @@
|
|
|
97
96
|
"placeholder_var_name": "Placeholder 变量名",
|
|
98
97
|
"please_input_with_vars": "请输入内容,支持按此格式书写变量:'{{USER_NAME}}",
|
|
99
98
|
"presence_penalty": "存在惩罚",
|
|
100
|
-
"preview_and_debug": "预览与调试",
|
|
101
99
|
"prompt_add_function": "新增函数",
|
|
102
100
|
"prompt_add_multi_modal_variable": "添加多模态变量",
|
|
103
101
|
"prompt_add_new_multi_modal_variable": "新增多模态变量",
|
|
@@ -109,7 +107,7 @@
|
|
|
109
107
|
"prompt_being_deprecated": "下线中",
|
|
110
108
|
"prompt_blank_prompt": "空白 Prompt",
|
|
111
109
|
"prompt_call_records": "调用记录",
|
|
112
|
-
"prompt_call_stream": "
|
|
110
|
+
"prompt_call_stream": "import (\n \"context\"\n \"errors\"\n \"io\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/chatmodel\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt/execution\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n\n streamReader, err := fornaxClient.StreamExecutePromptLocal(ctx, &execution.ExecutePromptLocalParam{\n PromptKey: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinja2/GO template 类型的模板支持在any里传递对象\n Variables: map[string]any{\n \"role\": \"旅行\",\n \"holiday_name\": \"元旦\",\n \"recomm_num\": 3,\n },\n // 可选,传递历史历史消息上下文列表和最新的用户消息\n ChatMessages: []*chatmodel.ChatMessage{\n {\n Role: chatmodel.RoleTypeUser,\n Content: \"推荐一点冬天相关的景点\",\n },\n },\n }) // 更复杂的使用场景请参考接入手册\n\n if err != nil {\n logs.CtxError(ctx, \"ExecutePromptLocal error: %v\", err)\n panic(err)\n }\n\n for {\n resp, err := streamReader.Recv(context.Background())\n if errors.Is(err, io.EOF) {\n break\n }\n if err != nil {\n logs.CtxError(ctx, \"StreamExecutePromptLocal recv error: %v\", err)\n return\n }\n logs.CtxInfo(ctx, resp.Choices[0].Delta.Content)\n }\n}",
|
|
113
111
|
"prompt_cannot_add_check_form_data": "无法新增,请检查表单数据",
|
|
114
112
|
"prompt_cannot_delete_snippet_variables": "只能删除 Prompt 里面的变量,片段中的变量无法被删除",
|
|
115
113
|
"prompt_case_sensitive": "区分大小写",
|
|
@@ -243,9 +241,9 @@
|
|
|
243
241
|
"prompt_prompt_snippet_nesting_support": "Prompt片段支持被嵌套在不同的Prompt Template里复用",
|
|
244
242
|
"prompt_prompt_snippet_reuse_support": "Prompt 片段支持在不同的 Prompt Template 里复用",
|
|
245
243
|
"prompt_prompt_submit": "Prompt 提交",
|
|
246
|
-
"prompt_prompthub_features_and_integration": "PromptHub:业务方能够通过集成
|
|
244
|
+
"prompt_prompthub_features_and_integration": "PromptHub:业务方能够通过集成 Fornax SDK 在业务服务中拉取于 Fornax 平台托管的 Prompt,获取 Prompt Template 详细内容,并在业务服务中自行调用模型进行推理或者与Eino等Agent框架进行集成。",
|
|
247
245
|
"prompt_provided_by_placeholder1": "由{placeholder1}提供",
|
|
248
|
-
"prompt_ptaas_overview_and_limitations": "PTaaS(Prompt As a Service) 即将托管的 Prompt 发布为可调用的接口,通过集成
|
|
246
|
+
"prompt_ptaas_overview_and_limitations": "PTaaS(Prompt As a Service) 即将托管的 Prompt 发布为可调用的接口,通过集成 Fornax SDK 在业务流程中直接且快速地调用该接口,实现 Prompt 的独立迭代与调优。PTaaS暂时不支持为业务方独立部署服务,由 Fornax 服务提供的模型调用能力。",
|
|
249
247
|
"prompt_reference_project": "引用项目",
|
|
250
248
|
"prompt_reference_snippet_prompt_version": "引用此片段Prompt 版本",
|
|
251
249
|
"prompt_release_successful": "发布成功",
|
|
@@ -257,9 +255,9 @@
|
|
|
257
255
|
"prompt_run_mode": "运行模式",
|
|
258
256
|
"prompt_sdk_data_reporting_and_observation": "接入 SDK 上报数据,进行数据观测",
|
|
259
257
|
"prompt_selected_tags": "所选标识",
|
|
260
|
-
"prompt_service_call_sync": "
|
|
261
|
-
"prompt_service_config_eg": "
|
|
262
|
-
"prompt_service_install_eg": "go get
|
|
258
|
+
"prompt_service_call_sync": "import (\n \"context\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/chatmodel\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt/execution\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n\n result, err := fornaxClient.ExecutePromptLocal(ctx, &execution.ExecutePromptLocalParam{\n PromptKey: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinja2/GO template 类型的模板支持在any里传递对象\n Variables: map[string]any{\n \"role\": \"旅行\",\n \"holiday_name\": \"元旦\",\n \"recomm_num\": \"3\",\n },\n // 可选,传递历史历史消息上下文列表和最新的用户消息\n ChatMessages: []*chatmodel.ChatMessage{\n {\n Role: chatmodel.RoleTypeUser,\n Content: \"推荐一点冬天相关的景点\",\n },\n },\n }) // 更复杂的使用场景请参考接入手册\n\n if err != nil {\n logs.CtxError(ctx, \"ExecutePromptLocal error: %v\", err)\n panic(err)\n }\n\n logs.CtxInfo(ctx, result.Choices[0].Message.Content)\n}",
|
|
259
|
+
"prompt_service_config_eg": "import (\n \"context\"\n\n \"code.byted.org/flowdevops/fornax_sdk\"\n \"code.byted.org/flowdevops/fornax_sdk/domain\"\n \"code.byted.org/flowdevops/fornax_sdk/domain/prompt\"\n \"code.byted.org/gopkg/logs/v2\"\n)\n\nfunc main() {\n ctx := context.Background()\n config := &domain.Config{\n Identity: &domain.Identity{\n AK: \"your ak\",\n SK: \"your sk\",\n },\n }\n // 请保证同一个AKSK只初始化一个fornaxClient,在多次请求时复用\n fornaxClient, err := fornax_sdk.NewClient(config)\n if err != nil {\n logs.CtxError(ctx, \"NewClient error: %v\", err)\n panic(err)\n }\n getPromptResult, err := fornaxClient.GetPrompt(ctx, &prompt.GetPromptParam{\n Key: \"fornax.example.trip_assistant\",\n Version: nil, // 可选,不传递则表示使用平台对应环境发布的版本(请保证发布)\n })\n if err != nil {\n logs.CtxError(ctx, \"GetPrompt error: %v\", err)\n panic(err)\n }\n promptObj := getPromptResult.Prompt\n // 可选,替换prompt中的变量,map中的any类型值请自行进行序列化后传递string,仅 Jinjia/GO template 类型的模板支持在any里传递对象\n messageList, err := fornaxClient.FormatPrompt(ctx, promptObj, map[string]any{\n \"role\": \"旅游\",\n \"holiday_name\": \"五一\",\n \"recomm_num\": \"3\",\n })\n // 第0个元素是systemprompt,如果托管了userprompt,第1个元素是userprompt\n for _, message := range messageList {\n logs.CtxInfo(ctx, \"role: %s,prompt:%s \\n\", message.Role, message.Content)\n }\n}",
|
|
260
|
+
"prompt_service_install_eg": "go get code.byted.org/flowdevops/fornax_sdk@latest",
|
|
263
261
|
"prompt_simulated_value_colon": "模拟值:",
|
|
264
262
|
"prompt_single_run": "单次运行",
|
|
265
263
|
"prompt_single_turn_conversation": "单轮对话",
|
|
@@ -291,19 +289,19 @@
|
|
|
291
289
|
"prompt_triple_braces_variable_recognition": "双大括号 {{{}}} 识别变量",
|
|
292
290
|
"prompt_type_change": "类型变更",
|
|
293
291
|
"prompt_usage_call_title": "调用配置",
|
|
294
|
-
"prompt_use_js_configuration": "import {
|
|
295
|
-
"prompt_use_js_installation": "npm i @
|
|
296
|
-
"prompt_use_js_streaming_call": "import {
|
|
297
|
-
"prompt_use_js_synchronous_call": "import {
|
|
298
|
-
"prompt_use_python_configuration": "
|
|
299
|
-
"prompt_use_python_installation": "pip install
|
|
300
|
-
"prompt_use_python_simultaneous_call": "
|
|
301
|
-
"prompt_use_python_streaming_call": "
|
|
292
|
+
"prompt_use_js_configuration": "import { fornaxPromptHub } from '@next-ai/fornax-sdk/components';\n\nconst hub = fornaxPromptHub({\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // 控制面区域,默认为 CN\n // region: 'CN' | 'I18N',\n});\n\nconst promptKey = 'fornax.demo.fornax_oncall';\nconst promptVersion = '0.0.3';\n\n// 预加载 Prompt(可选,不影响后续直接获取)\nawait hub.preload({ key: promptKey, version: promptVersion });\n\n// 获取 Prompt & 插值\nconst prompt = await hub.get({\n key: promptKey,\n version: promptVersion,\n // 自动填充 system / user中的变量\n variables: {\n // 对应 {{name}} 以此类推\n name: 'Oncall精灵',\n context: '<从知识库检索的上下文>',\n query: '介绍Fornax平台评测功能',\n },\n});",
|
|
293
|
+
"prompt_use_js_installation": "npm i @next-ai/fornax-sdk",
|
|
294
|
+
"prompt_use_js_streaming_call": "import { ptaas } from '@next-ai/fornax-sdk/components';\n\n// Prompt Key\nconst promptKey = 'fornax.prompt.key';\n// 初始化\nconst model = ptaas(promptKey, {\n // Fornax 鉴权配置,⚠️ 需要与 Prompt Key 对应\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // 可选 初始化模型配置,invoke/stream时也可传(合并,优先级更高),\n modelConfigs: {\n // 可选 Prompt 发布的版本,为空时默认使用最新版\n version: '0.0.1',\n // 可选 流量标识,用于计算Prompt版本,优先级 version > traffic\n // 可选 插值变量\n variables: {},\n // 可选 独立模型账号列表,账号模式选择独立账号时,需要传递自己的独立账号信息\n customAccounts: [],\n // 可选 请求额外参数(如`gptOpenApiExtra`)\n requestExtra: {\n // 可选 透传GPTOpenAPI平台extra参数\n gptOpenApiExtra: '',\n },\n },\n});\n\n// 流式调用\nconst { fullStream } = await model.stream({\n // 消息上下文\n messages: [{ role: 'user', content: 'hello' }],\n // 运行时模型配置\n modelConfigs: {},\n});\n\n// for-await 遍历流\nfor await (const chunk of fullStream) {\n console.info(chunk.choices[0].message.content);\n}",
|
|
295
|
+
"prompt_use_js_synchronous_call": "import { ptaas } from '@next-ai/fornax-sdk/components';\n\n// Prompt Key\nconst promptKey = 'fornax.prompt.key';\n// 初始化\nconst model = ptaas(promptKey, {\n // Fornax 鉴权配置,⚠️ 需要与 Prompt Key 对应\n ak: '<fornax ak>',\n sk: '<fornax sk>',\n // 可选 初始化模型配置,invoke/stream时也可传(合并,优先级更高),\n modelConfigs: {\n // 可选 Prompt 发布的版本,为空时默认使用最新版\n version: '0.0.1',\n // 可选 插值变量\n variables: {},\n // 可选 独立模型账号列表,账号模式选择独立账号时,需要传递自己的独立账号信息\n customAccounts: [],\n // 可选 请求额外参数(如`gptOpenApiExtra`)\n requestExtra: {\n // 可选 透传GPTOpenAPI平台extra参数\n gptOpenApiExtra: '',\n },\n },\n});\n\n// 非流式调用\nconst { choices } = await model.invoke({\n // 消息上下文\n messages: [{ role: 'user', content: 'hello' }],\n // 运行时模型配置\n modelConfigs: {},\n});",
|
|
296
|
+
"prompt_use_python_configuration": "from bytedance.fornax.infra import FornaxClient, initialize\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\nprompt = FornaxClient.global_fornax_client.get_fornax_prompt(\n prompt_key=\"prompt.chatcompletion.test\",\n # 不传默认为当前环境发布的最新版本\n # version=\"0.0.1\"\n)\nif prompt.prompt_text.system_prompt is not None:\n print(prompt.prompt_text.system_prompt.content)\nif prompt.prompt_text.user_prompt is not None:\n print(prompt.prompt_text.user_prompt.content)",
|
|
297
|
+
"prompt_use_python_installation": "pip install bytedance.fornax",
|
|
298
|
+
"prompt_use_python_simultaneous_call": "from bytedance.fornax.infra import FornaxClient, initialize\nfrom bytedance.fornax.infra.prompt_service import ExecutePromptParam\nfrom bytedance.fornax.infra.prompt_service.types import Message, MessageType, Variable\n\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\n# Fornax SDK执行Prompt入参\nparams = ExecutePromptParam(prompt_key=\"prompt.chatcompletion.test\",\n # 可选,替换Prompt Template里定义的变量\n variables=[Variable(key=\"name\", value=\"小娜\")],\n # 可选,历史消息上下文\n contexts=[\n Message(content=\"我叫小帅\", message_type=MessageType.USER),\n Message(content=\"你好呀\", message_type=MessageType.ASSISTANT),\n ],\n # 可选,用户当前消息\n message=Message(\n message_type=MessageType.USER,\n content=\"介绍一下你自己\",\n ),\n )\n# 非流式执行Prompt,stream=False\nresp = FornaxClient.global_fornax_client.execute_prompt(params, stream=False)\nprint(resp.item.content)",
|
|
299
|
+
"prompt_use_python_streaming_call": "from bytedance.fornax.infra import FornaxClient, initialize\nfrom bytedance.fornax.infra.prompt_service import ExecutePromptParam\nfrom bytedance.fornax.infra.prompt_service.types import Message, MessageType, Variable\n\n\n# 初始化fornax sdk\ninitialize('your ak', 'your sk')\n\n# Fornax SDK执行Prompt入参\nparams = ExecutePromptParam(prompt_key=\"prompt.chatcompletion.test\",\n # 可选,替换Prompt Template里定义的变量\n variables=[Variable(key=\"name\", value=\"小娜\")],\n # 可选,历史消息上下文\n contexts=[\n Message(content=\"我叫小帅\", message_type=MessageType.USER),\n Message(content=\"你好呀\", message_type=MessageType.ASSISTANT),\n ],\n # 可选,用户当前消息\n message=Message(\n message_type=MessageType.USER,\n content=\"介绍一下你自己\",\n ),\n )\n# 非流式执行Prompt,stream=False\nresp_stream = FornaxClient.global_fornax_client.execute_prompt(params, stream=True)\n\n# next方式读取\n# while True:\n# try:\n# chunk = next(resp_stream)\n# print(chunk.item.content)\n# except StopIteration:\n# break\n\n# for循环方式读取\nfor chunk in resp_stream:\n print(chunk.item.content)",
|
|
302
300
|
"prompt_use_sdk": "使用 SDK",
|
|
303
301
|
"prompt_user_manual": "用户手册",
|
|
304
302
|
"prompt_user_or_model_contains_risky_content": "用户输入或者模型返回包含风险内容",
|
|
305
303
|
"prompt_var_format": "支持输入英文字母和下划线,且首字母必须是字母",
|
|
306
|
-
"prompt_variable": "Prompt
|
|
304
|
+
"prompt_variable": "Prompt变量",
|
|
307
305
|
"prompt_variable_name": "变量名称",
|
|
308
306
|
"prompt_variable_name_cannot_start_space": "变量名不能以空格开头",
|
|
309
307
|
"prompt_variable_name_duplicate": "变量名重复",
|
|
@@ -311,7 +309,7 @@
|
|
|
311
309
|
"prompt_variable_name_format_rule": "变量名格式仅支持字母、数字、下划线、中划线,且不能以数字开头",
|
|
312
310
|
"prompt_variable_name_rule_letters_numbers_underscore": "只能包含字母、数字或下划线,并且以字母开头",
|
|
313
311
|
"prompt_variable_referenced_in_snippets": "此变量在{snippetNames}片段中被引用",
|
|
314
|
-
"prompt_variable_value": "变量值",
|
|
312
|
+
"prompt_variable_value": "Prompt 变量值",
|
|
315
313
|
"prompt_version_contains_first_level_nesting": "此版本已包含一级嵌套",
|
|
316
314
|
"prompt_version_empty_submitted": "暂无已提交版本",
|
|
317
315
|
"prompt_version_inconsistent_with_prompt_template": "此版本与当前Prompt模版类型不一致",
|
|
@@ -334,7 +332,6 @@
|
|
|
334
332
|
"stop_respond": "停止响应",
|
|
335
333
|
"submission_no_version_diff": "本次提交无版本差异",
|
|
336
334
|
"system_role": "System",
|
|
337
|
-
"task_delete_title": "提示",
|
|
338
335
|
"time_consumed": "耗时",
|
|
339
336
|
"top_k": "Top K",
|
|
340
337
|
"top_p": "Top P",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"create_tag": "Create Tag",
|
|
13
13
|
"data_engine_changes_sync_to_space_mgmt": "Changes will be synchronized to 'Space Management - Label Management'",
|
|
14
14
|
"data_engine_edit": "Data engine edit",
|
|
15
|
-
"data_engine_label_disabled": "
|
|
16
|
-
"data_engine_no_label_selected": "
|
|
15
|
+
"data_engine_label_disabled": "This label is disabled",
|
|
16
|
+
"data_engine_no_label_selected": "No label selected",
|
|
17
17
|
"data_engine_refresh": "Data engine refresh",
|
|
18
18
|
"description_length_limit": "Description cannot exceed 200 characters",
|
|
19
19
|
"disable_tag": "Disable Tag",
|
|
@@ -32,15 +32,13 @@
|
|
|
32
32
|
"no_tags_available": "No tags available",
|
|
33
33
|
"please_enter": "Please enter",
|
|
34
34
|
"saved_check_feedback": "Saved",
|
|
35
|
-
"
|
|
36
|
-
"tag_auto_saving": "Auto saving...",
|
|
35
|
+
"tag_auto_saving": "Auto-saving...",
|
|
37
36
|
"tag_category_tag_disabled_edit_warn": "This category tag option has been disabled; if modified, it will no longer be displayed",
|
|
38
|
-
"tag_change_log": "Change
|
|
37
|
+
"tag_change_log": "Change Log",
|
|
39
38
|
"tag_configuration": "Tag Configuration",
|
|
40
39
|
"tag_create_failure": "Tag creation failed",
|
|
41
40
|
"tag_create_success": "Tag created successfully",
|
|
42
41
|
"tag_description": "Tag Description",
|
|
43
|
-
"tag_disabled_no_modification": "This tag is disabled and cannot be modified",
|
|
44
42
|
"tag_edit_sync_warning": "After modifying tags, existing tagged data will be automatically synchronized and updated.",
|
|
45
43
|
"tag_management": "Tag Management",
|
|
46
44
|
"tag_name": "Tag Name",
|
|
@@ -55,7 +53,7 @@
|
|
|
55
53
|
"tag_placeholder_update_start": "Update tag {placeholder1}'s",
|
|
56
54
|
"tag_saved_please_check_feedback": "Saved, please check Feedback",
|
|
57
55
|
"tag_status": "Tag Status",
|
|
58
|
-
"tag_tag_name": "Tag
|
|
56
|
+
"tag_tag_name": "Tag Name",
|
|
59
57
|
"tag_type": "Tag Type",
|
|
60
58
|
"tag_update_failure": "Tag update failed",
|
|
61
59
|
"tag_update_success": "Tag updated successfully",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"create_tag": "新建标签",
|
|
13
13
|
"data_engine_changes_sync_to_space_mgmt": "修改将会同步至“空间管理-标签管理”。",
|
|
14
14
|
"data_engine_edit": "数据引擎编辑",
|
|
15
|
-
"data_engine_label_disabled": "
|
|
16
|
-
"data_engine_no_label_selected": "
|
|
15
|
+
"data_engine_label_disabled": "该标签已禁用",
|
|
16
|
+
"data_engine_no_label_selected": "暂未选择标签",
|
|
17
17
|
"data_engine_refresh": "数据引擎刷新",
|
|
18
18
|
"description_length_limit": "描述不能超过200个字符",
|
|
19
19
|
"disable_tag": "禁用标签",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
"no_tags_available": "暂无标签",
|
|
33
33
|
"please_enter": "请输入",
|
|
34
34
|
"saved_check_feedback": "已保存",
|
|
35
|
-
"select_category": "请选择分类",
|
|
36
35
|
"tag_auto_saving": "自动保存中...",
|
|
37
36
|
"tag_category_tag_disabled_edit_warn": "该分类标签选项已禁用,若修改将不再展示",
|
|
38
37
|
"tag_change_log": "修改记录",
|
|
@@ -40,7 +39,6 @@
|
|
|
40
39
|
"tag_create_failure": "标签创建失败",
|
|
41
40
|
"tag_create_success": "标签创建成功",
|
|
42
41
|
"tag_description": "标签描述",
|
|
43
|
-
"tag_disabled_no_modification": "该标签已禁用,不允许修改",
|
|
44
42
|
"tag_edit_sync_warning": "修改标签后,存量已打标数据将会自动同步更新。",
|
|
45
43
|
"tag_management": "标签管理",
|
|
46
44
|
"tag_name": "标签名称",
|
package/package.json
CHANGED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,sCAAsC;AACtC,sCAAsC;AACtC,wCAAwC;AACxC,OAAO;AACP,2EAAuD;AACvD,2EAAuD;AAEvD,OAAO;AACP,2EAAuD;AACvD,2EAAuD;AAEvD,SAAS;AACT,6EAA2D;AAC3D,6EAA2D;AAE3D,aAAa;AACb,iFAAmE;AACnE,iFAAmE;AAEnE,WAAW;AACX,+EAA+D;AAC/D,+EAA+D;AAE/D,cAAc;AACd,kFAAqE;AACrE,kFAAqE;AAErE,SAAS;AACT,6EAA2D;AAC3D,6EAA2D;AAE3D,MAAM;AACN,0EAAqD;AACrD,0EAAqD;AAExC,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CACrC,EAAE,EACF,oBAAgB,EAChB,oBAAoB,EACpB,oBAAc,EACd,oBAAc,EACd,oBAAgB,EAChB,oBAAkB,EAClB,oBAAqB,EACrB,oBAAa,CACd,CAAC;AAEW,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CACrC,EAAE,EACF,oBAAgB,EAChB,oBAAoB,EACpB,oBAAc,EACd,oBAAc,EACd,oBAAgB,EAChB,oBAAkB,EAClB,oBAAqB,EACrB,oBAAa,CACd,CAAC"}
|