From 17757930a397b4b840d49a81013d012657ca5fec Mon Sep 17 00:00:00 2001 From: Yongteng Lei Date: Mon, 29 Sep 2025 14:49:45 +0800 Subject: [PATCH] Feat: add support for international Dashscope service (#10356) ### What problem does this PR solve? Add support for international Dashscope service. #10340 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- rag/llm/chat_model.py | 8 ++------ web/src/locales/de.ts | 4 ++++ web/src/locales/en.ts | 13 ++++++++----- web/src/locales/es.ts | 4 ++++ web/src/locales/fr.ts | 6 +++++- web/src/locales/id.ts | 4 ++++ web/src/locales/ja.ts | 3 +++ web/src/locales/pt-br.ts | 4 ++++ web/src/locales/ru.ts | 4 ++++ web/src/locales/zh-traditional.ts | 3 +++ web/src/locales/zh.ts | 3 +++ .../setting-model/api-key-modal/index.tsx | 12 ++++++++++-- 12 files changed, 54 insertions(+), 14 deletions(-) diff --git a/rag/llm/chat_model.py b/rag/llm/chat_model.py index e1d3dcf01..a28f56fb8 100644 --- a/rag/llm/chat_model.py +++ b/rag/llm/chat_model.py @@ -146,7 +146,7 @@ class Base(ABC): response = self.client.chat.completions.create(model=self.model_name, messages=history, **gen_conf, **kwargs) - if (not response.choices or not response.choices[0].message or not response.choices[0].message.content): + if not response.choices or not response.choices[0].message or not response.choices[0].message.content: return "", 0 ans = response.choices[0].message.content.strip() if response.choices[0].finish_reason == "length": @@ -457,7 +457,7 @@ class Base(ABC): yield total_tokens def total_token_count(self, resp): - return total_token_count_from_response(resp) + return total_token_count_from_response(resp) def _calculate_dynamic_ctx(self, history): """Calculate dynamic context window size""" @@ -1305,10 +1305,6 @@ class LiteLLMBase(ABC): "302.AI", ] - import litellm - - litellm._turn_on_debug() - def __init__(self, key, model_name, base_url=None, **kwargs): self.timeout = int(os.environ.get("LM_TIMEOUT_SECONDS", 600)) self.provider = kwargs.get("provider", "") diff --git a/web/src/locales/de.ts b/web/src/locales/de.ts index 19ccb12b4..e00f1fb06 100644 --- a/web/src/locales/de.ts +++ b/web/src/locales/de.ts @@ -624,6 +624,10 @@ export default { baseUrl: 'Basis-URL', baseUrlTip: 'Wenn Ihr API-Schlüssel von OpenAI stammt, ignorieren Sie dies. Andere Zwischenanbieter geben diese Basis-URL mit dem API-Schlüssel an.', + tongyiBaseUrlTip: + 'Für chinesische Benutzer ist keine Eingabe erforderlich oder verwenden Sie https://dashscope.aliyuncs.com/compatible-mode/v1. Für internationale Benutzer verwenden Sie https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Nur für internationale Benutzer, bitte Hinweis beachten)', modify: 'Ändern', systemModelSettings: 'Standardmodelle festlegen', chatModel: 'Chat-Modell', diff --git a/web/src/locales/en.ts b/web/src/locales/en.ts index 8d9a9c3f1..192afe284 100644 --- a/web/src/locales/en.ts +++ b/web/src/locales/en.ts @@ -701,6 +701,9 @@ This auto-tagging feature enhances retrieval by adding another layer of domain-s baseUrl: 'Base-Url', baseUrlTip: 'If your API key is from OpenAI, just ignore it. Any other intermediate providers will give this base url with the API key.', + tongyiBaseUrlTip: + 'For Chinese users, no need to fill in or use https://dashscope.aliyuncs.com/compatible-mode/v1. For international users, use https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: '(International users only, please see tip)', modify: 'Modify', systemModelSettings: 'Set default models', chatModel: 'Chat model', @@ -972,14 +975,14 @@ This auto-tagging feature enhances retrieval by adding another layer of domain-s addTools: 'Add Tools', sysPromptDefultValue: ` - You are a helpful assistant, an AI assistant specialized in problem-solving for the user. + You are a helpful assistant, an AI assistant specialized in problem-solving for the user. If a specific domain is provided, adapt your expertise to that domain; otherwise, operate as a generalist. - 1. Understand the user’s request. - 2. Decompose it into logical subtasks. - 3. Execute each subtask step by step, reasoning transparently. - 4. Validate accuracy and consistency. + 1. Understand the user’s request. + 2. Decompose it into logical subtasks. + 3. Execute each subtask step by step, reasoning transparently. + 4. Validate accuracy and consistency. 5. Summarize the final result clearly. `, singleLineText: 'Single-line text', diff --git a/web/src/locales/es.ts b/web/src/locales/es.ts index 57d3a29db..a94651540 100644 --- a/web/src/locales/es.ts +++ b/web/src/locales/es.ts @@ -340,6 +340,10 @@ export default { baseUrl: 'URL base', baseUrlTip: 'Si tu clave API es de OpenAI, ignora esto. Cualquier otro proveedor intermedio proporcionará esta URL base junto con la clave API.', + tongyiBaseUrlTip: + 'Para usuarios chinos, no es necesario rellenar o usar https://dashscope.aliyuncs.com/compatible-mode/v1. Para usuarios internacionales, usar https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Solo para usuarios internacionales, por favor ver consejo)', modify: 'Modificar', systemModelSettings: 'Establecer modelos predeterminados', chatModel: 'Modelo de chat', diff --git a/web/src/locales/fr.ts b/web/src/locales/fr.ts index 1d9286015..40e02b2a8 100644 --- a/web/src/locales/fr.ts +++ b/web/src/locales/fr.ts @@ -522,6 +522,10 @@ export default { baseUrl: 'URL de base', baseUrlTip: "Si votre clé API provient d'OpenAI, ignorez ceci. Tout autre fournisseur intermédiaire fournira cette URL de base avec la clé API.", + tongyiBaseUrlTip: + 'Pour les utilisateurs chinois, pas besoin de remplir ou utiliser https://dashscope.aliyuncs.com/compatible-mode/v1. Pour les utilisateurs internationaux, utilisez https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + "(Utilisateurs internationaux uniquement, veuillez consulter l'astuce)", modify: 'Modifier', systemModelSettings: 'Définir les modèles par défaut', chatModel: 'Modèle de chat', @@ -783,7 +787,7 @@ export default { 'Un composant qui recherche sur duckduckgo.com, vous permettant de spécifier le nombre de résultats avec TopN. Il complète les bases de connaissances existantes.', searXNG: 'SearXNG', searXNGDescription: - 'Un composant qui effectue des recherches via la URL de l\'instance de SearXNG que vous fournissez. Spécifiez TopN et l\'URL de l\'instance.', + "Un composant qui effectue des recherches via la URL de l'instance de SearXNG que vous fournissez. Spécifiez TopN et l'URL de l'instance.", channel: 'Canal', channelTip: "Effectuer une recherche de texte ou d'actualités sur l'entrée du composant", diff --git a/web/src/locales/id.ts b/web/src/locales/id.ts index 6cec4894b..57dbae0e9 100644 --- a/web/src/locales/id.ts +++ b/web/src/locales/id.ts @@ -512,6 +512,10 @@ export default { baseUrl: 'Base-Url', baseUrlTip: 'Jika kunci API Anda berasal dari OpenAI, abaikan saja. Penyedia perantara lainnya akan memberikan base url ini dengan kunci API.', + tongyiBaseUrlTip: + 'Untuk pengguna Tiongkok, tidak perlu diisi atau gunakan https://dashscope.aliyuncs.com/compatible-mode/v1. Untuk pengguna internasional, gunakan https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Hanya untuk pengguna internasional, silakan lihat tip)', modify: 'Ubah', systemModelSettings: 'Tetapkan model default', chatModel: 'Model Obrolan', diff --git a/web/src/locales/ja.ts b/web/src/locales/ja.ts index b3a2a920f..1d71fb734 100644 --- a/web/src/locales/ja.ts +++ b/web/src/locales/ja.ts @@ -554,6 +554,9 @@ export default { baseUrl: 'ベースURL', baseUrlTip: 'APIキーがOpenAIからのものであれば無視してください。他の中間プロバイダーはAPIキーと共にこのベースURLを提供します。', + tongyiBaseUrlTip: + '中国ユーザーの場合、記入不要または https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください。国際ユーザーは https://dashscope-intl.aliyuncs.com/compatible-mode/v1 を使用してください', + tongyiBaseUrlPlaceholder: '(国際ユーザーのみ、ヒントをご覧ください)', modify: '変更', systemModelSettings: 'デフォルトモデルを設定する', chatModel: 'チャットモデル', diff --git a/web/src/locales/pt-br.ts b/web/src/locales/pt-br.ts index 59ae2692d..64f9edb3a 100644 --- a/web/src/locales/pt-br.ts +++ b/web/src/locales/pt-br.ts @@ -504,6 +504,10 @@ export default { baseUrl: 'URL Base', baseUrlTip: 'Se sua chave da API for do OpenAI, ignore isso. Outros provedores intermediários fornecerão essa URL base com a chave da API.', + tongyiBaseUrlTip: + 'Para usuários chineses, não é necessário preencher ou usar https://dashscope.aliyuncs.com/compatible-mode/v1. Para usuários internacionais, use https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Apenas para usuários internacionais, consulte a dica)', modify: 'Modificar', systemModelSettings: 'Definir modelos padrão', chatModel: 'Modelo de chat', diff --git a/web/src/locales/ru.ts b/web/src/locales/ru.ts index 61faafd5d..296e878c8 100644 --- a/web/src/locales/ru.ts +++ b/web/src/locales/ru.ts @@ -671,6 +671,10 @@ export default { baseUrl: 'Базовый URL', baseUrlTip: 'Если ваш API ключ от OpenAI, оставьте пустым. Другие провайдеры предоставляют базовый URL с API ключом.', + tongyiBaseUrlTip: + 'Для китайских пользователей не нужно заполнять, используйте https://dashscope.aliyuncs.com/compatible-mode/v1. Для международных пользователей используйте https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Только для международных пользователей, см. подсказку)', modify: 'Изменить', systemModelSettings: 'Установить модели по умолчанию', chatModel: 'Модель чата', diff --git a/web/src/locales/zh-traditional.ts b/web/src/locales/zh-traditional.ts index 40faa6680..e589a4599 100644 --- a/web/src/locales/zh-traditional.ts +++ b/web/src/locales/zh-traditional.ts @@ -593,6 +593,9 @@ export default { baseUrl: 'base-url', baseUrlTip: '如果您的 API 密鑰來自 OpenAI,請忽略它。任何其他中間提供商都會提供帶有 API 密鑰的基本 URL。', + tongyiBaseUrlTip: + '中國用戶無需填寫或使用 https://dashscope.aliyuncs.com/compatible-mode/v1。國際用戶請使用 https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: '(僅國際用戶,請參閱提示)', modify: '修改', systemModelSettings: '設定預設模型', chatModel: '聊天模型', diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts index 0b4d8a4d2..c4c79d89c 100644 --- a/web/src/locales/zh.ts +++ b/web/src/locales/zh.ts @@ -689,6 +689,9 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于 baseUrl: 'Base-Url', baseUrlTip: '如果您的 API 密钥来自 OpenAI,请忽略它。 任何其他中间提供商都会提供带有 API 密钥的基本 URL。', + tongyiBaseUrlTip: + '对于中国用户,不需要填写或使用 https://dashscope.aliyuncs.com/compatible-mode/v1。对于国际用户,使用 https://dashscope-intl.aliyuncs.com/compatible-mode/v1。', + tongyiBaseUrlPlaceholder: '(仅国际用户需要)', modify: '修改', systemModelSettings: '设置默认模型', chatModel: '聊天模型', diff --git a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx b/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx index b0c5e1451..0212c40a4 100644 --- a/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx +++ b/web/src/pages/user-setting/setting-model/api-key-modal/index.tsx @@ -88,10 +88,18 @@ const ApiKeyModal = ({ label={t('baseUrl')} name="base_url" - tooltip={t('baseUrlTip')} + tooltip={ + llmFactory === LLMFactory.TongYiQianWen + ? t('tongyiBaseUrlTip') + : t('baseUrlTip') + } >