Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Use Romanian & other languages in QA embedding #4047

Closed
wants to merge 45 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
85043e7
Use Romanian & other langs in QA
rennokki May 2, 2024
53fd95b
Update language.ts
rennokki May 9, 2024
a1a0cb5
version to 0.6.6 (#4050)
takatost May 2, 2024
1643484
fix: workflow avg user interaction. (#4056)
GarfieldDai May 2, 2024
0f59354
fix: unable to fetch CoT agent runner log (#4052)
sinomoe May 3, 2024
ebadcac
test: add integration tests on CodeExecutor with the sandbox service …
bowenliang123 May 3, 2024
ee80db6
Fix typo: writeOpner -> writeOpener (#4060)
shoheiweb86 May 3, 2024
b382070
Feat: frontend support timezone of timestamp (#4070)
JzoNgKVO May 4, 2024
46264d8
fix: agent log timezone (#4076)
Yeuoly May 4, 2024
512a455
feat: add a new built-in tool of Slack Incoming Webhook (#4067)
ericyangpan May 4, 2024
52becaf
fix: transform None into correct dest type (#4077)
Yeuoly May 4, 2024
2c8a8e9
Revert "fix: hydration warning (#3897)" (#4059)
TinsFox May 4, 2024
bf2b382
Update bedrock.yaml add Region Asia Pacific (Sydney) (#4016)
chenx5 May 5, 2024
b370800
Leptonai integrate (#4079)
joshua20231026 May 5, 2024
dc1c80c
Urgent Correction: Resolving Critical License Documentation Error in …
LinkX-shomasakamoto May 6, 2024
1118202
improve: menu collapse readability (#4099)
JunIce May 6, 2024
2ce2a34
fix: correct the license link (#4093)
buddypia May 6, 2024
418a0ce
fix: typo in get-automatic-res.tsx (#4097)
eltociear May 6, 2024
20a32fe
🦄 refactor(dataset svc): delete check none (#4101)
baxiang May 6, 2024
09f769d
feat: support aliyun oss auth v4 (#3886)
S96EA May 6, 2024
b930611
fix: prevent http node overwrite on open (#4127)
perzeuss May 7, 2024
3a2e042
feat: add http node max size env (#4137)
Yeuoly May 7, 2024
9f0760e
Improved Japanese translation (#4119)
Fyphen1223 May 7, 2024
ec31632
improve: test CodeExecutor with code templates and extract CodeLangua…
bowenliang123 May 7, 2024
ea020a1
feat: support time format (#4138)
Yeuoly May 7, 2024
60e4679
feat: support openai stream usage (#4140)
Yeuoly May 7, 2024
34367eb
bug fix: update minimax model_apis (#4116)
Weaxs May 7, 2024
5de394a
feat(Languages): :alien: add pl-PL language (#4128)
patryk20120 May 7, 2024
531d1bc
azure_openai add gpt-4-turbo-2024-04-09 model (#4144)
charli117 May 7, 2024
b49e247
fix: passing in 0 as a numeric variable will be converted to null (#4…
takatost May 7, 2024
8370312
question classifier optimize (#4147)
JohnJyong May 7, 2024
018a6e6
fix: http authorization leakage (#4146)
Yeuoly May 7, 2024
cc4fab2
Add support for local ai speech to text (#3921)
Tomywang999 May 7, 2024
4090046
feat: support vision models from xinference (#4094)
Minamiyama May 7, 2024
1d4774a
feat: update model_provider jina to support custom url and model (#4110)
VoidIsVoid May 7, 2024
42db25a
fix dataset segment update api not effect issue (#4151)
JohnJyong May 7, 2024
ec6ef5f
feat: add proxy configuration for Cohere model (#4152)
huangbaichao May 7, 2024
2b8d914
fix: stop event propagation when deleting selected workflow var node …
lawvs May 7, 2024
0030805
Add-Deepseek (#4157)
joshua20231026 May 7, 2024
789c61c
feat: DeepSeek (#4162)
soulteary May 7, 2024
e49d29d
Fix:typo Incorrect Japanese 2 (#4167)
sasaharukimedes May 8, 2024
c25b24e
Typo on deepseek.yaml and yi.yaml (#4170)
Yongtae723 May 8, 2024
44afad2
feat: add volcengine maas model provider (#4142)
sinomoe May 8, 2024
299f416
fix: workflow http node timeout & url check (#4175)
zxhlyh May 8, 2024
66440ac
Use Romanian & other langs in QA
rennokki May 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/api-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ jobs:
- name: Run Tool
run: dev/pytest/pytest_tools.sh

- name: Set up Sandbox
uses: hoverkraft-tech/compose-action@v2.0.0
with:
compose-file: |
docker/docker-compose.middleware.yaml
services: |
sandbox

- name: Run Workflow
run: dev/pytest/pytest_workflow.sh

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ We need to be nimble and ship fast given where we are, but we also want to make

This guide, like Dify itself, is a constant work in progress. We highly appreciate your understanding if at times it lags behind the actual project, and welcome any feedback for us to improve.

In terms of licensing, please take a minute to read our short [License and Contributor Agreement](./license). The community also adheres to the [code of conduct](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md).
In terms of licensing, please take a minute to read our short [License and Contributor Agreement](./LICENSE). The community also adheres to the [code of conduct](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md).

## Before you jump in

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

这份指南,就像 Dify 本身一样,是一个不断改进的工作。如果有时它落后于实际项目,我们非常感谢你的理解,并欢迎任何反馈以供我们改进。

在许可方面,请花一分钟阅读我们简短的[许可证和贡献者协议](./license)。社区还遵守[行为准则](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md)。
在许可方面,请花一分钟阅读我们简短的[许可证和贡献者协议](./LICENSE)。社区还遵守[行为准则](https://github.com/langgenius/.github/blob/main/CODE_OF_CONDUCT.md)。

## 在开始之前

Expand Down
30 changes: 15 additions & 15 deletions README_JA.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<p align="center">
<a href="https://cloud.dify.ai">Dify Cloud</a> ·
<a href="https://docs.dify.ai/getting-started/install-self-hosted">自己ホスティング</a> ·
<a href="https://docs.dify.ai/getting-started/install-self-hosted">セルフホスト</a> ·
<a href="https://docs.dify.ai">ドキュメント</a> ·
<a href="https://cal.com/guchenhe/dify-demo">デモのスケジュール</a>
</p>
Expand Down Expand Up @@ -54,7 +54,7 @@ DifyはオープンソースのLLMアプリケーション開発プラットフ



**2. 網羅的なモデルサポート**:
**2. 包括的なモデルサポート**:
数百のプロプライエタリ/オープンソースのLLMと、数十の推論プロバイダーおよびセルフホスティングソリューションとのシームレスな統合を提供します。GPT、Mistral、Llama3、およびOpenAI API互換のモデルをカバーします。サポートされているモデルプロバイダーの完全なリストは[こちら](https://docs.dify.ai/getting-started/readme/model-providers)をご覧ください。

![providers-v5](https://github.com/langgenius/dify/assets/13230914/5a17bdbe-097a-4100-8363-40255b70f6e3)
Expand Down Expand Up @@ -94,9 +94,9 @@ DifyはオープンソースのLLMアプリケーション開発プラットフ
</tr>
<tr>
<td align="center">サポートされているLLM</td>
<td align="center">豊富なバリエーション</td>
<td align="center">豊富なバリエーション</td>
<td align="center">豊富なバリエーション</td>
<td align="center">バリエーション豊富</td>
<td align="center">バリエーション豊富</td>
<td align="center">バリエーション豊富</td>
<td align="center">OpenAIのみ</td>
</tr>
<tr>
Expand Down Expand Up @@ -146,34 +146,34 @@ DifyはオープンソースのLLMアプリケーション開発プラットフ
## Difyの使用方法

- **クラウド </br>**
[こちら](https://dify.ai)のDify Cloudサービスを利用して、セットアップが不要で誰でも試すことができます。サンドボックスプランでは、200回の無料のGPT-4呼び出しが含まれています。
[こちら](https://dify.ai)のDify Cloudサービスを利用して、セットアップ不要で試すことができます。サンドボックスプランには、200回の無料のGPT-4呼び出しが含まれています。

- **Dify Community Editionのセルフホスティング</br>**
この[スターターガイド](#quick-start)を使用して、環境でDifyをすばやく実行できます
さらなる参照や詳細な手順については、[ドキュメント](https://docs.dify.ai)をご覧ください。
この[スターターガイド](#quick-start)を使用して、ローカル環境でDifyを簡単に実行できます
さらなる参考資料や詳細な手順については、[ドキュメント](https://docs.dify.ai)をご覧ください。

- **エンタープライズ/組織向けのDify</br>**
追加のエンタープライズ向け機能を提供しています。[こちらからミーティングを予約](https://cal.com/guchenhe/30min)したり、[メールを送信](mailto:business@dify.ai?subject=[GitHub]Business%20License%20Inquiry)してエンタープライズのニーズについて相談してください。 </br>
> AWSを使用しているスタートアップや中小企業の場合は、[AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-t22mebxzwjhu6)のDify Premiumをチェックして、ワンクリックで独自のAWS VPCにデプロイできます。カスタムロゴとブランディングでアプリを作成するオプションを備えた手頃な価格のAMIオファリングです。


## 先を見る
## 最新の情報を入手

GitHubでDifyにスターを付け、新しいリリースをすぐに通知されます
GitHub上でDifyにスターを付けることで、Difyに関する新しいニュースを受け取れます

![star-us](https://github.com/langgenius/dify/assets/13230914/b823edc1-6388-4e25-ad45-2f6b187adbb4)



## クイックスタート
> Difyをインストールする前に、マシンが以下の最小システム要件を満たしていることを確認してください
> Difyをインストールする前に、お使いのマシンが以下の最小システム要件を満たしていることを確認してください
>
>- CPU >= 2コア
>- RAM >= 4GB

</br>

Difyサーバーを起動する最も簡単な方法は、当社の[docker-compose.yml](docker/docker-compose.yaml)ファイルを実行することです。インストールコマンドを実行する前に、マシンに[Docker](https://docs.docker.com/get-docker/)と[Docker Compose](https://docs.docker.com/compose/install/)がインストールされていることを確認してください。
Difyサーバーを起動する最も簡単な方法は、[docker-compose.yml](docker/docker-compose.yaml)ファイルを実行することです。インストールコマンドを実行する前に、マシンに[Docker](https://docs.docker.com/get-docker/)と[Docker Compose](https://docs.docker.com/compose/install/)がインストールされていることを確認してください。

```bash
cd docker
Expand Down Expand Up @@ -216,7 +216,7 @@ docker compose up -d
* [Discord](https://discord.gg/FngNHpbcY7). 主に: アプリケーションの共有やコミュニティとの交流。
* [Twitter](https://twitter.com/dify_ai). 主に: アプリケーションの共有やコミュニティとの交流。

または、直接チームメンバーとミーティングをスケジュールします
または、直接チームメンバーとミーティングをスケジュール

<table>
<tr>
Expand All @@ -227,7 +227,7 @@ docker compose up -d
<td><a href='https://cal.com

/guchenhe/30min'>ミーティング</a></td>
<td>無料の30分間のミーティングをスケジュールしてください。</td>
<td>無料の30分間のミーティングをスケジュール</td>
</tr>
<tr>
<td><a href='mailto:support@dify.ai?subject=[GitHub]Technical%20Support'>技術サポート</a></td>
Expand All @@ -242,4 +242,4 @@ docker compose up -d

## ライセンス

プロジェクトはMITライセンスの下で利用可能です。[LICENSE](LICENSE)をご参照ください
このリポジトリは、Dify Open Source License にいくつかの追加制限を加えた[Difyオープンソースライセンス](LICENSE)の下で利用可能です
5 changes: 5 additions & 0 deletions api/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ ALIYUN_OSS_BUCKET_NAME=your-bucket-name
ALIYUN_OSS_ACCESS_KEY=your-access-key
ALIYUN_OSS_SECRET_KEY=your-secret-key
ALIYUN_OSS_ENDPOINT=your-endpoint
ALIYUN_OSS_AUTH_VERSION=v1
ALIYUN_OSS_REGION=your-region

# Google Storage configuration
GOOGLE_STORAGE_BUCKET_NAME=yout-bucket-name
GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON=your-google-service-account-json-base64-string
Expand Down Expand Up @@ -160,6 +163,8 @@ API_TOOL_DEFAULT_READ_TIMEOUT=60
HTTP_REQUEST_MAX_CONNECT_TIMEOUT=300
HTTP_REQUEST_MAX_READ_TIMEOUT=600
HTTP_REQUEST_MAX_WRITE_TIMEOUT=600
HTTP_REQUEST_NODE_MAX_BINARY_SIZE=10485760 # 10MB
HTTP_REQUEST_NODE_MAX_TEXT_SIZE=1048576 # 1MB

# Log file path
LOG_FILE=
4 changes: 3 additions & 1 deletion api/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def __init__(self):
# ------------------------
# General Configurations.
# ------------------------
self.CURRENT_VERSION = "0.6.5"
self.CURRENT_VERSION = "0.6.6"
self.COMMIT_SHA = get_env('COMMIT_SHA')
self.EDITION = get_env('EDITION')
self.DEPLOY_ENV = get_env('DEPLOY_ENV')
Expand Down Expand Up @@ -215,6 +215,8 @@ def __init__(self):
self.ALIYUN_OSS_ACCESS_KEY=get_env('ALIYUN_OSS_ACCESS_KEY')
self.ALIYUN_OSS_SECRET_KEY=get_env('ALIYUN_OSS_SECRET_KEY')
self.ALIYUN_OSS_ENDPOINT=get_env('ALIYUN_OSS_ENDPOINT')
self.ALIYUN_OSS_REGION=get_env('ALIYUN_OSS_REGION')
self.ALIYUN_OSS_AUTH_VERSION=get_env('ALIYUN_OSS_AUTH_VERSION')
self.GOOGLE_STORAGE_BUCKET_NAME = get_env('GOOGLE_STORAGE_BUCKET_NAME')
self.GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64 = get_env('GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64')

Expand Down
3 changes: 2 additions & 1 deletion api/constants/languages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@


languages = ['en-US', 'zh-Hans', 'zh-Hant', 'pt-BR', 'es-ES', 'fr-FR', 'de-DE', 'ja-JP', 'ko-KR', 'ru-RU', 'it-IT', 'uk-UA', 'vi-VN']
languages = ['en-US', 'zh-Hans', 'zh-Hant', 'pt-BR', 'es-ES', 'fr-FR', 'de-DE', 'ja-JP', 'ko-KR', 'ru-RU', 'it-IT', 'uk-UA', 'vi-VN', 'pl-PL']

language_timezone_mapping = {
'en-US': 'America/New_York',
Expand All @@ -16,6 +16,7 @@
'it-IT': 'Europe/Rome',
'uk-UA': 'Europe/Kyiv',
'vi-VN': 'Asia/Ho_Chi_Minh',
'pl-PL': 'Europe/Warsaw',
}


Expand Down
2 changes: 1 addition & 1 deletion api/controllers/console/app/workflow_statistic.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ def get(self, app_model):
{{start}}
{{end}}
GROUP BY date, c.created_by) sub
GROUP BY sub.created_by, sub.date
GROUP BY sub.date
"""
arg_dict = {'tz': account.timezone, 'app_id': app_model.id, 'triggered_from': WorkflowRunTriggeredFrom.APP_RUN.value}

Expand Down
2 changes: 1 addition & 1 deletion api/core/agent/cot_agent_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ def increase_usage(final_llm_usage_dict: dict[str, LLMUsage], usage: LLMUsage):
tool_input={scratchpad.action.action_name: scratchpad.action.action_input},
thought=scratchpad.thought,
observation={scratchpad.action.action_name: tool_invoke_response},
tool_invoke_meta=tool_invoke_meta.to_dict(),
tool_invoke_meta={scratchpad.action.action_name: tool_invoke_meta.to_dict()},
answer=scratchpad.agent_response,
messages_ids=message_file_ids,
llm_usage=usage_dict['usage']
Expand Down
8 changes: 5 additions & 3 deletions api/core/app/apps/base_app_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ def _get_cleaned_inputs(self, user_inputs: dict, app_config: AppConfig):
for variable_config in variables:
variable = variable_config.variable

if variable not in user_inputs or not user_inputs[variable]:
if (variable not in user_inputs
or user_inputs[variable] is None
or (isinstance(user_inputs[variable], str) and user_inputs[variable] == '')):
if variable_config.required:
raise ValueError(f"{variable} is required in input form")
else:
Expand All @@ -22,7 +24,7 @@ def _get_cleaned_inputs(self, user_inputs: dict, app_config: AppConfig):

value = user_inputs[variable]

if value:
if value is not None:
if variable_config.type != VariableEntity.Type.NUMBER and not isinstance(value, str):
raise ValueError(f"{variable} in input form must be a string")
elif variable_config.type == VariableEntity.Type.NUMBER and isinstance(value, str):
Expand All @@ -44,7 +46,7 @@ def _get_cleaned_inputs(self, user_inputs: dict, app_config: AppConfig):
if value and isinstance(value, str):
filtered_inputs[variable] = value.replace('\x00', '')
else:
filtered_inputs[variable] = value if value else None
filtered_inputs[variable] = value if value is not None else None

return filtered_inputs

35 changes: 23 additions & 12 deletions api/core/helper/code_executor/code_executor.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from enum import Enum
from typing import Literal, Optional

from httpx import post
Expand Down Expand Up @@ -28,7 +29,25 @@ class Data(BaseModel):
data: Data


class CodeLanguage(str, Enum):
PYTHON3 = 'python3'
JINJA2 = 'jinja2'
JAVASCRIPT = 'javascript'


class CodeExecutor:
code_template_transformers = {
CodeLanguage.PYTHON3: PythonTemplateTransformer,
CodeLanguage.JINJA2: Jinja2TemplateTransformer,
CodeLanguage.JAVASCRIPT: NodeJsTemplateTransformer,
}

code_language_to_running_language = {
CodeLanguage.JAVASCRIPT: 'nodejs',
CodeLanguage.JINJA2: CodeLanguage.PYTHON3,
CodeLanguage.PYTHON3: CodeLanguage.PYTHON3,
}

@classmethod
def execute_code(cls, language: Literal['python3', 'javascript', 'jinja2'], preload: str, code: str) -> str:
"""
Expand All @@ -44,9 +63,7 @@ def execute_code(cls, language: Literal['python3', 'javascript', 'jinja2'], prel
}

data = {
'language': 'python3' if language == 'jinja2' else
'nodejs' if language == 'javascript' else
'python3' if language == 'python3' else None,
'language': cls.code_language_to_running_language.get(language),
'code': code,
'preload': preload
}
Expand Down Expand Up @@ -86,15 +103,9 @@ def execute_workflow_code_template(cls, language: Literal['python3', 'javascript
:param inputs: inputs
:return:
"""
template_transformer = None
if language == 'python3':
template_transformer = PythonTemplateTransformer
elif language == 'jinja2':
template_transformer = Jinja2TemplateTransformer
elif language == 'javascript':
template_transformer = NodeJsTemplateTransformer
else:
raise CodeExecutionException('Unsupported language')
template_transformer = cls.code_template_transformers.get(language)
if not template_transformer:
raise CodeExecutionException(f'Unsupported language {language}')

runner, preload = template_transformer.transform_caller(code, inputs)

Expand Down
2 changes: 2 additions & 0 deletions api/core/model_runtime/model_providers/_position.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@
- yi
- openllm
- localai
- volcengine_maas
- openai_api_compatible
- deepseek
76 changes: 76 additions & 0 deletions api/core/model_runtime/model_providers/azure_openai/_constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,82 @@ class AzureBaseModel(BaseModel):
)
)
),
AzureBaseModel(
base_model_name='gpt-4-turbo-2024-04-09',
entity=AIModelEntity(
model='fake-deployment-name',
label=I18nObject(
en_US='fake-deployment-name-label',
),
model_type=ModelType.LLM,
features=[
ModelFeature.AGENT_THOUGHT,
ModelFeature.VISION,
ModelFeature.MULTI_TOOL_CALL,
ModelFeature.STREAM_TOOL_CALL,
],
fetch_from=FetchFrom.CUSTOMIZABLE_MODEL,
model_properties={
ModelPropertyKey.MODE: LLMMode.CHAT.value,
ModelPropertyKey.CONTEXT_SIZE: 128000,
},
parameter_rules=[
ParameterRule(
name='temperature',
**PARAMETER_RULE_TEMPLATE[DefaultParameterName.TEMPERATURE],
),
ParameterRule(
name='top_p',
**PARAMETER_RULE_TEMPLATE[DefaultParameterName.TOP_P],
),
ParameterRule(
name='presence_penalty',
**PARAMETER_RULE_TEMPLATE[DefaultParameterName.PRESENCE_PENALTY],
),
ParameterRule(
name='frequency_penalty',
**PARAMETER_RULE_TEMPLATE[DefaultParameterName.FREQUENCY_PENALTY],
),
_get_max_tokens(default=512, min_val=1, max_val=4096),
ParameterRule(
name='seed',
label=I18nObject(
zh_Hans='种子',
en_US='Seed'
),
type='int',
help=I18nObject(
zh_Hans='如果指定,模型将尽最大努力进行确定性采样,使得重复的具有相同种子和参数的请求应该返回相同的结果。不能保证确定性,您应该参考 system_fingerprint 响应参数来监视变化。',
en_US='If specified, model will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed, and you should refer to the system_fingerprint response parameter to monitor changes in the backend.'
),
required=False,
precision=2,
min=0,
max=1,
),
ParameterRule(
name='response_format',
label=I18nObject(
zh_Hans='回复格式',
en_US='response_format'
),
type='string',
help=I18nObject(
zh_Hans='指定模型必须输出的格式',
en_US='specifying the format that the model must output'
),
required=False,
options=['text', 'json_object']
),
],
pricing=PriceConfig(
input=0.001,
output=0.003,
unit=0.001,
currency='USD',
)
)
),
AzureBaseModel(
base_model_name='gpt-4-vision-preview',
entity=AIModelEntity(
Expand Down
4 changes: 4 additions & 0 deletions api/core/model_runtime/model_providers/bedrock/bedrock.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ provider_credential_schema:
label:
en_US: AWS GovCloud (US-West)
zh_Hans: AWS GovCloud (US-West)
- value: ap-southeast-2
label:
en_US: Asia Pacific (Sydney)
zh_Hans: 亚太地区 (悉尼)
- variable: model_for_validation
required: false
label:
Expand Down