diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 5fcfde37ef5..2cbcf0c29d4 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -3257,9 +3257,10 @@ export class Task extends EventEmitter implements TaskLike { // Determine cancellation reason const cancelReason: ClineApiReqCancelReason = this.abort ? "user_cancelled" : "streaming_failed" + const rawErrorMessage = error.message ?? JSON.stringify(serializeError(error), null, 2) const streamingFailedMessage = this.abort ? undefined - : (error.message ?? JSON.stringify(serializeError(error), null, 2)) + : `${t("common:interruption.streamTerminatedByProvider")}: ${rawErrorMessage}` // Clean up partial state await abortStream(cancelReason, streamingFailedMessage) diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index 576594a85ca..ecc60195bd5 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -176,7 +176,8 @@ }, "interruption": { "responseInterruptedByUser": "Resposta interrompuda per l'usuari", - "responseInterruptedByApiError": "Resposta interrompuda per error d'API" + "responseInterruptedByApiError": "Resposta interrompuda per error d'API", + "streamTerminatedByProvider": "El proveïdor ha finalitzat la sol·licitud" }, "storage": { "prompt_custom_path": "Introdueix una ruta d'emmagatzematge personalitzada per a l'historial de converses o deixa-ho buit per utilitzar la ubicació predeterminada", diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index e3ff5b04c9f..73c8213ce00 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Antwort vom Benutzer unterbrochen", - "responseInterruptedByApiError": "Antwort durch API-Fehler unterbrochen" + "responseInterruptedByApiError": "Antwort durch API-Fehler unterbrochen", + "streamTerminatedByProvider": "Der Anbieter hat die Anfrage beendet" }, "storage": { "prompt_custom_path": "Gib den benutzerdefinierten Speicherpfad für den Gesprächsverlauf ein, leer lassen für Standardspeicherort", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index 2d783275119..2d17e13feab 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Response interrupted by user", - "responseInterruptedByApiError": "Response interrupted by API error" + "responseInterruptedByApiError": "Response interrupted by API error", + "streamTerminatedByProvider": "Provider ended the request" }, "storage": { "prompt_custom_path": "Enter custom conversation history storage path, leave empty to use default location", diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index e4c1059a6c4..9cc23f5bb1c 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Respuesta interrumpida por el usuario", - "responseInterruptedByApiError": "Respuesta interrumpida por error de API" + "responseInterruptedByApiError": "Respuesta interrumpida por error de API", + "streamTerminatedByProvider": "El proveedor finalizó la solicitud" }, "storage": { "prompt_custom_path": "Ingresa la ruta de almacenamiento personalizada para el historial de conversaciones, déjala vacía para usar la ubicación predeterminada", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index fe5f62fbb42..ce991866451 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Réponse interrompue par l'utilisateur", - "responseInterruptedByApiError": "Réponse interrompue par une erreur d'API" + "responseInterruptedByApiError": "Réponse interrompue par une erreur d'API", + "streamTerminatedByProvider": "Le fournisseur a terminé la demande" }, "storage": { "prompt_custom_path": "Entrez le chemin de stockage personnalisé pour l'historique des conversations, laissez vide pour utiliser l'emplacement par défaut", diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index 1b411c300e4..9cf2456f7c3 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "उपयोगकर्ता द्वारा प्रतिक्रिया बाधित", - "responseInterruptedByApiError": "API त्रुटि द्वारा प्रतिक्रिया बाधित" + "responseInterruptedByApiError": "API त्रुटि द्वारा प्रतिक्रिया बाधित", + "streamTerminatedByProvider": "प्रदाता ने अनुरोध समाप्त किया" }, "storage": { "prompt_custom_path": "वार्तालाप इतिहास के लिए कस्टम स्टोरेज पाथ दर्ज करें, डिफ़ॉल्ट स्थान का उपयोग करने के लिए खाली छोड़ दें", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json index 0c1a10549f2..295f843b8a6 100644 --- a/src/i18n/locales/id/common.json +++ b/src/i18n/locales/id/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Respons diinterupsi oleh pengguna", - "responseInterruptedByApiError": "Respons diinterupsi oleh error API" + "responseInterruptedByApiError": "Respons diinterupsi oleh error API", + "streamTerminatedByProvider": "Penyedia mengakhiri permintaan" }, "storage": { "prompt_custom_path": "Masukkan path penyimpanan riwayat percakapan kustom, biarkan kosong untuk menggunakan lokasi default", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index 9c8cad214ca..237fc4faa30 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Risposta interrotta dall'utente", - "responseInterruptedByApiError": "Risposta interrotta da errore API" + "responseInterruptedByApiError": "Risposta interrotta da errore API", + "streamTerminatedByProvider": "Il provider ha terminato la richiesta" }, "storage": { "prompt_custom_path": "Inserisci il percorso di archiviazione personalizzato per la cronologia delle conversazioni, lascia vuoto per utilizzare la posizione predefinita", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index bb9725ece1e..a2da92cfac8 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "ユーザーによって応答が中断されました", - "responseInterruptedByApiError": "APIエラーによって応答が中断されました" + "responseInterruptedByApiError": "APIエラーによって応答が中断されました", + "streamTerminatedByProvider": "プロバイダーがリクエストを終了しました" }, "storage": { "prompt_custom_path": "会話履歴のカスタムストレージパスを入力してください。デフォルトの場所を使用する場合は空のままにしてください", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index aa1988086da..d2d696510dc 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "사용자에 의해 응답이 중단됨", - "responseInterruptedByApiError": "API 오류로 인해 응답이 중단됨" + "responseInterruptedByApiError": "API 오류로 인해 응답이 중단됨", + "streamTerminatedByProvider": "제공자가 요청을 종료함" }, "storage": { "prompt_custom_path": "대화 내역을 위한 사용자 지정 저장 경로를 입력하세요. 기본 위치를 사용하려면 비워두세요", diff --git a/src/i18n/locales/nl/common.json b/src/i18n/locales/nl/common.json index 9e6a583825f..91a3a94401d 100644 --- a/src/i18n/locales/nl/common.json +++ b/src/i18n/locales/nl/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Reactie onderbroken door gebruiker", - "responseInterruptedByApiError": "Reactie onderbroken door API-fout" + "responseInterruptedByApiError": "Reactie onderbroken door API-fout", + "streamTerminatedByProvider": "Provider heeft het verzoek beëindigd" }, "storage": { "prompt_custom_path": "Voer een aangepast opslagpad voor gespreksgeschiedenis in, laat leeg voor standaardlocatie", diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index b41af53cc92..7247573cd37 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Odpowiedź przerwana przez użytkownika", - "responseInterruptedByApiError": "Odpowiedź przerwana przez błąd API" + "responseInterruptedByApiError": "Odpowiedź przerwana przez błąd API", + "streamTerminatedByProvider": "Dostawca zakończył żądanie" }, "storage": { "prompt_custom_path": "Wprowadź niestandardową ścieżkę przechowywania dla historii konwersacji lub pozostaw puste, aby użyć lokalizacji domyślnej", diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index 3554878c759..bf53a9764bc 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -176,7 +176,8 @@ }, "interruption": { "responseInterruptedByUser": "Resposta interrompida pelo usuário", - "responseInterruptedByApiError": "Resposta interrompida por erro da API" + "responseInterruptedByApiError": "Resposta interrompida por erro da API", + "streamTerminatedByProvider": "Provedor encerrou a solicitação" }, "storage": { "prompt_custom_path": "Digite o caminho de armazenamento personalizado para o histórico de conversas, deixe em branco para usar o local padrão", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index 475364164ac..dedbe8450e9 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Ответ прерван пользователем", - "responseInterruptedByApiError": "Ответ прерван ошибкой API" + "responseInterruptedByApiError": "Ответ прерван ошибкой API", + "streamTerminatedByProvider": "Провайдер завершил запрос" }, "storage": { "prompt_custom_path": "Введите пользовательский путь хранения истории разговоров, оставьте пустым для использования расположения по умолчанию", diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index c188c4c1c81..4cbb45210dc 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Yanıt kullanıcı tarafından kesildi", - "responseInterruptedByApiError": "Yanıt API hatası nedeniyle kesildi" + "responseInterruptedByApiError": "Yanıt API hatası nedeniyle kesildi", + "streamTerminatedByProvider": "Sağlayıcı isteği sonlandırdı" }, "storage": { "prompt_custom_path": "Konuşma geçmişi için özel depolama yolunu girin, varsayılan konumu kullanmak için boş bırakın", diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index 51c53732167..659b0ad0afe 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "Phản hồi bị gián đoạn bởi người dùng", - "responseInterruptedByApiError": "Phản hồi bị gián đoạn bởi lỗi API" + "responseInterruptedByApiError": "Phản hồi bị gián đoạn bởi lỗi API", + "streamTerminatedByProvider": "Nhà cung cấp đã kết thúc yêu cầu" }, "storage": { "prompt_custom_path": "Nhập đường dẫn lưu trữ tùy chỉnh cho lịch sử hội thoại, để trống để sử dụng vị trí mặc định", diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 147f5e05084..fcc054d8a7d 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -177,7 +177,8 @@ }, "interruption": { "responseInterruptedByUser": "响应被用户中断", - "responseInterruptedByApiError": "响应被 API 错误中断" + "responseInterruptedByApiError": "响应被 API 错误中断", + "streamTerminatedByProvider": "提供方终止了请求" }, "storage": { "prompt_custom_path": "输入自定义会话历史存储路径,留空以使用默认位置", diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 7e53be370bc..b8a6fc42a1b 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -172,7 +172,8 @@ }, "interruption": { "responseInterruptedByUser": "回應被使用者中斷", - "responseInterruptedByApiError": "回應被 API 錯誤中斷" + "responseInterruptedByApiError": "回應被 API 錯誤中斷", + "streamTerminatedByProvider": "提供方終止了請求" }, "storage": { "prompt_custom_path": "輸入自訂會話歷史儲存路徑,留空以使用預設位置",