From 5b2e435c3de2cdd1f45352fb8e7c0455114a3cd8 Mon Sep 17 00:00:00 2001 From: Minh Nguyen <197183301+minhnguyen-ai@users.noreply.github.com> Date: Mon, 27 Jul 2026 10:10:51 -0700 Subject: [PATCH] Add the custom error messages if there is error from local ai server --- .gitignore | 1 + .../main/resources/i18n/messages.properties | 1 + .../resources/i18n/messages_de.properties | 1 + .../resources/i18n/messages_es.properties | 1 + .../resources/i18n/messages_fr.properties | 1 + .../resources/i18n/messages_ja_JP.properties | 1 + .../resources/i18n/messages_ko_KR.properties | 1 + .../resources/i18n/messages_pt_BR.properties | 1 + .../resources/i18n/messages_vi_VN.properties | 1 + .../resources/i18n/messages_zh_CN.properties | 1 + .../resources/i18n/messages_zh_TW.properties | 1 + .../askimo/core/exception/ExceptionMapper.kt | 16 +++++++++++++ .../io/askimo/core/exception/UserException.kt | 16 +++++++++++++ .../core/providers/ChatClientExtensions.kt | 23 +++++++++++++++++++ 14 files changed, 66 insertions(+) diff --git a/.gitignore b/.gitignore index 0a0ffd756..e72d0cf40 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ Gemfile.lock certificate*.txt .idea/ +.java-version diff --git a/desktop-shared/src/main/resources/i18n/messages.properties b/desktop-shared/src/main/resources/i18n/messages.properties index 55ad21690..add8e21b1 100644 --- a/desktop-shared/src/main/resources/i18n/messages.properties +++ b/desktop-shared/src/main/resources/i18n/messages.properties @@ -1071,6 +1071,7 @@ error.insufficient_credits=⚠️ Insufficient API credits\n\nYour credit balanc error.timeout=⚠️ Request timed out after {timeout} seconds\n\nPossible causes:\n• High server load – please try again later\n• Complex request – simplify your input\n• Network delays error.context_length=⚠️ Context window exceeded\n\nThe total input (conversation history + your message + attachments) is too large for this model to process.\n\nTo fix this:\n• Start a new chat session to clear the conversation history\n• Shorten your message or remove large attachments\n• If using a local model (Ollama / LM Studio / Docker), increase the context size in its settings\n• Switch to a model with a larger context window error.invalid_request=⚠️ Invalid request: {details}\n\nPlease check your input and try again. +error.local_server=⚠️ Local AI server error!\n\nThe AI server process crashed or failed to load the model. This is not caused by Askimo.\n\nPossible causes:\n• The model file is corrupted or incomplete — try re-downloading it\n• Not enough RAM/VRAM — try a smaller quantization (e.g. Q4 instead of Q8)\n• Unsupported model format for the current server version\n• The server process was killed by the OS (out-of-memory)\n\nWhat to do:\n1. Check your local AI server logs for the full error\n2. Restart the server and try again\n3. Re-pull or re-download the model\n4. Try a different model or quantization level\n\nTechnical details: {details} error.system=⚠️ System Error\n\nAn unexpected error occurred: {errorCode}\n\nPlease contact Askimo support with:\n• What you were doing\n• The error code above\n• The timestamp # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_de.properties b/desktop-shared/src/main/resources/i18n/messages_de.properties index cc7d54330..2acedac39 100644 --- a/desktop-shared/src/main/resources/i18n/messages_de.properties +++ b/desktop-shared/src/main/resources/i18n/messages_de.properties @@ -1032,6 +1032,7 @@ error.insufficient_credits=⚠️ Unzureichendes Guthaben\n\nIhr Guthaben ist zu error.timeout=⚠️ Anfrage nach {timeout} Sekunden abgelaufen\n\nMögliche Ursachen:\n• Hohe Serverlast – versuchen Sie es später erneut\n• Komplexe Anfrage – vereinfachen Sie Ihre Eingabe\n• Netzwerkverzögerungen error.context_length=⚠️ Kontextfenster überschritten\n\nDie gesamte Eingabe (Konversationsverlauf + Ihre Nachricht + Anhänge) ist zu groß, als dass dieses Modell sie verarbeiten könnte.\n\nSo beheben Sie das Problem:\n• Starten Sie eine neue Chat-Sitzung, um den Konversationsverlauf zu löschen\n• Kürzen Sie Ihre Nachricht oder entfernen Sie große Anhänge\n• Wenn Sie ein lokales Modell verwenden (Ollama / LM Studio / Docker), erhöhen Sie die Kontextgröße in den Einstellungen\n• Wechseln Sie zu einem Modell mit einem größeren Kontextfenster error.invalid_request=⚠️ Ungültige Anfrage: {details}\n\nBitte überprüfen Sie Ihre Eingabe und versuchen Sie es erneut. +error.local_server=⚠️ Fehler beim lokalen KI-Server!\n\nDer KI-Serverprozess ist abgestürzt oder konnte das Modell nicht laden. Dies wird nicht durch Askimo verursacht.\n\nMögliche Ursachen:\n• Die Modelldatei ist beschädigt oder unvollständig — versuchen Sie, sie erneut herunterzuladen\n• Nicht genug RAM/VRAM — versuchen Sie eine kleinere Quantisierung (z. B. Q4 statt Q8)\n• Nicht unterstütztes Modellformat für die aktuelle Serverversion\n• Der Serverprozess wurde vom Betriebssystem beendet (Out-of-Memory)\n\nWas zu tun ist:\n1. Überprüfen Sie die Logs Ihres lokalen KI-Servers\n2. Starten Sie den Server neu und versuchen Sie es erneut\n3. Laden Sie das Modell erneut herunter\n4. Versuchen Sie ein anderes Modell oder eine andere Quantisierungsstufe\n\nTechnische Details: {details} error.system=⚠️ Systemfehler\n\nEin unerwarteter Fehler ist aufgetreten: {errorCode}\n\nBitte wenden Sie sich an den Askimo-Support mit:\n• Ihrer letzten Aktion\n• Dem obigen Fehlercode\n• Dem Zeitstempel # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_es.properties b/desktop-shared/src/main/resources/i18n/messages_es.properties index 0b91f5caf..2ba56b946 100644 --- a/desktop-shared/src/main/resources/i18n/messages_es.properties +++ b/desktop-shared/src/main/resources/i18n/messages_es.properties @@ -1029,6 +1029,7 @@ error.insufficient_credits=⚠️ Créditos insuficientes\n\nSu saldo de crédit error.timeout=⚠️ La solicitud expiró después de {timeout} segundos\n\nPosibles causas:\n• Alta carga del servidor – intente nuevamente más tarde\n• Consulta compleja – intente simplificarla\n• Latencia de red error.context_length=⚠️ Ventana de contexto excedida\n\nLa entrada total (historial de la conversación + su mensaje + archivos adjuntos) es demasiado grande para que este modelo la procese.\n\nPara solucionar esto:\n• Inicie una nueva sesión de chat para borrar el historial de la conversación\n• Acorte su mensaje o elimine archivos adjuntos grandes\n• Si utiliza un modelo local (Ollama / LM Studio / Docker), aumente el tamaño del contexto en su configuración\n• Cambie a un modelo con una ventana de contexto más grande error.invalid_request=⚠️ Solicitud no válida: {details}\n\nRevise su entrada e inténtelo de nuevo. +error.local_server=⚠️ ¡Error del servidor de IA local!\n\nEl proceso del servidor de IA se bloqueó o no pudo cargar el modelo. Esto no es causado por Askimo.\n\nPosibles causas:\n• El archivo del modelo está corrupto o incompleto — intente descargarlo nuevamente\n• RAM/VRAM insuficiente — pruebe una cuantización menor (p. ej. Q4 en lugar de Q8)\n• Formato de modelo no compatible con la versión actual del servidor\n• El proceso del servidor fue terminado por el sistema operativo (sin memoria)\n\nQué hacer:\n1. Revise los registros de su servidor de IA local\n2. Reinicie el servidor e inténtelo de nuevo\n3. Vuelva a descargar el modelo\n4. Pruebe un modelo diferente o un nivel de cuantización distinto\n\nDetalles técnicos: {details} error.system=⚠️ Error del sistema\n\nOcurrió un error inesperado: {errorCode}\n\nContacte al soporte de Askimo con:\n• Lo que estaba haciendo\n• El código de error anterior\n• La marca de tiempo # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_fr.properties b/desktop-shared/src/main/resources/i18n/messages_fr.properties index 31534fa25..61c522bca 100644 --- a/desktop-shared/src/main/resources/i18n/messages_fr.properties +++ b/desktop-shared/src/main/resources/i18n/messages_fr.properties @@ -1029,6 +1029,7 @@ error.insufficient_credits=⚠️ Crédits insuffisants\n\nVotre solde est trop error.timeout=⚠️ La requête a expiré après {timeout} secondes\n\nCauses possibles :\n• Charge serveur élevée – réessayez plus tard\n• Requête complexe – simplifiez-la\n• Latence réseau error.context_length=⚠️ Fenêtre de contexte dépassée\n\nL'entrée totale (historique de la conversation + votre message + pièces jointes) est trop volumineuse pour être traitée par ce modèle.\n\nPour corriger cela :\n• Démarrez une nouvelle session de chat pour effacer l'historique de la conversation\n• Raccourcissez votre message ou supprimez les pièces jointes volumineuses\n• Si vous utilisez un modèle local (Ollama / LM Studio / Docker), augmentez la taille du contexte dans ses paramètres\n• Passez à un modèle avec une fenêtre de contexte plus grande error.invalid_request=⚠️ Requête invalide : {details}\n\nVeuillez vérifier votre saisie et réessayer. +error.local_server=⚠️ Erreur du serveur IA local !\n\nLe processus du serveur IA a planté ou n'a pas pu charger le modèle. Ce n'est pas causé par Askimo.\n\nCauses possibles :\n• Le fichier modèle est corrompu ou incomplet — essayez de le retélécharger\n• RAM/VRAM insuffisante — essayez une quantification plus petite (ex. Q4 au lieu de Q8)\n• Format de modèle non pris en charge par la version actuelle du serveur\n• Le processus serveur a été tué par le système d'exploitation (mémoire insuffisante)\n\nQue faire :\n1. Consultez les journaux de votre serveur IA local\n2. Redémarrez le serveur et réessayez\n3. Re-téléchargez le modèle\n4. Essayez un autre modèle ou niveau de quantification\n\nDétails techniques : {details} error.system=⚠️ Erreur système\n\nUne erreur inattendue est survenue : {errorCode}\n\nVeuillez contacter le support Askimo avec :\n• Ce que vous faisiez\n• Le code d’erreur ci-dessus\n• L’horodatage # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_ja_JP.properties b/desktop-shared/src/main/resources/i18n/messages_ja_JP.properties index d8226712a..a4e334dc1 100644 --- a/desktop-shared/src/main/resources/i18n/messages_ja_JP.properties +++ b/desktop-shared/src/main/resources/i18n/messages_ja_JP.properties @@ -1030,6 +1030,7 @@ error.insufficient_credits=⚠️ クレジット残高不足\n\nクレジット error.timeout=⚠️ {timeout} 秒後にリクエストがタイムアウトしました\n\n原因として考えられること:\n• サーバー負荷が高い—少し待って再試行してください\n• クエリが複雑—内容を簡略化してみてください\n• ネットワーク遅延 error.context_length=⚠️ コンテキストウィンドウの制限を超えました\n\n入力の合計(会話履歴 + あなたのメッセージ + 添付ファイル)が大きすぎて、このモデルでは処理できません。\n\n解決するには:\n• 新しいチャットセッションを開始して会話履歴をクリアしてください\n• メッセージを短くするか、大きな添付ファイルを削除してください\n• ローカルモデル(Ollama / LM Studio / Docker)を使用している場合は、設定でコンテキストサイズを増やしてください\n• より大きなコンテキストウィンドウを持つモデルに切り替えてください error.invalid_request=⚠️ 無効なリクエスト:{details}\n\n入力内容を確認して、もう一度お試しください。 +error.local_server=⚠️ ローカルAIサーバーエラー!\n\nAIサーバープロセスがクラッシュするか、モデルの読み込みに失敗しました。これはAskimoが原因ではありません。\n\n考えられる原因:\n• モデルファイルが破損または不完全 — 再ダウンロードをお試しください\n• RAM/VRAMが不足 — より小さい量子化(例:Q8ではなくQ4)をお試しください\n• 現在のサーバーバージョンでサポートされていないモデル形式\n• サーバープロセスがOSによって強制終了された(メモリ不足)\n\n対処方法:\n1. ローカルAIサーバーのログを確認してください\n2. サーバーを再起動して再試行してください\n3. モデルを再ダウンロードしてください\n4. 別のモデルまたは量子化レベルをお試しください\n\n技術的詳細:{details} error.system=⚠️ システムエラー\n\n予期しないエラーが発生しました:{errorCode}\n\nAskimo サポートへ次を添えてご連絡ください:\n• 実行していた操作\n• 上記のエラーコード\n• タイムスタンプ # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_ko_KR.properties b/desktop-shared/src/main/resources/i18n/messages_ko_KR.properties index c63a15718..b481b444e 100644 --- a/desktop-shared/src/main/resources/i18n/messages_ko_KR.properties +++ b/desktop-shared/src/main/resources/i18n/messages_ko_KR.properties @@ -1030,6 +1030,7 @@ error.insufficient_credits=⚠️ 크레딧 부족\n\n크레딧 잔액이 너무 error.timeout=⚠️ {timeout}초 후 요청 시간이 초과되었습니다\n\n가능한 원인:\n• 서버 부하가 높음 - 잠시 후 다시 시도\n• 쿼리가 복잡함 - 더 간단하게 작성\n• 네트워크 지연 error.context_length=⚠️ 컨텍스트 창 초과\n\n전체 입력(대화 기록 + 메시지 + 첨부 파일)이 너무 커서 이 모델이 처리할 수 없습니다.\n\n해결 방법:\n• 새로운 채팅 세션을 시작하여 대화 기록을 지우세요\n• 메시지를 줄이거나 큰 첨부 파일을 제거하세요\n• 로컬 모델(Ollama / LM Studio / Docker)을 사용하는 경우, 설정에서 컨텍스트 크기를 늘리세요\n• 더 큰 컨텍스트 창을 지원하는 모델로 전환하세요 error.invalid_request=⚠️ 잘못된 요청: {details}\n\n입력 내용을 확인한 뒤 다시 시도하세요. +error.local_server=⚠️ 로컬 AI 서버 오류!\n\nAI 서버 프로세스가 충돌하거나 모델을 로드하지 못했습니다. 이는 Askimo로 인한 문제가 아닙니다.\n\n가능한 원인:\n• 모델 파일이 손상되었거나 불완전합니다 — 다시 다운로드해 보세요\n• RAM/VRAM 부족 — 더 작은 양자화(예: Q8 대신 Q4)를 시도해 보세요\n• 현재 서버 버전에서 지원하지 않는 모델 형식\n• 서버 프로세스가 OS에 의해 종료됨(메모리 부족)\n\n해결 방법:\n1. 로컬 AI 서버 로그를 확인하세요\n2. 서버를 재시작하고 다시 시도하세요\n3. 모델을 다시 다운로드하세요\n4. 다른 모델 또는 양자화 수준을 시도해 보세요\n\n기술적 세부 정보: {details} error.system=⚠️ 시스템 오류\n\n예기치 않은 오류가 발생했습니다: {errorCode}\n\nAskimo 지원팀에 다음 정보를 함께 전달해 주세요:\n• 수행 중이던 작업\n• 위의 오류 코드\n• 타임스탬프 # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_pt_BR.properties b/desktop-shared/src/main/resources/i18n/messages_pt_BR.properties index 72821dd03..c6e09837d 100644 --- a/desktop-shared/src/main/resources/i18n/messages_pt_BR.properties +++ b/desktop-shared/src/main/resources/i18n/messages_pt_BR.properties @@ -1033,6 +1033,7 @@ error.insufficient_credits=⚠️ Créditos insuficientes\n\nSeu saldo está mui error.timeout=⚠️ A solicitação expirou após {timeout} segundos\n\nIsso pode acontecer por:\n• Alta carga no servidor - tente novamente em instantes\n• Consulta complexa - tente simplificar\n• Latência de rede error.context_length=⚠️ Janela de contexto excedida\n\nA entrada total (histórico da conversa + sua mensagem + anexos) é muito grande para este modelo processar.\n\nPara corrigir isso:\n• Inicie uma nova sessão de chat para limpar o histórico da conversa\n• Encurte sua mensagem ou remova anexos grandes\n• Se estiver usando um modelo local (Ollama / LM Studio / Docker), aumente o tamanho do contexto nas configurações dele\n• Mude para um modelo com uma janela de contexto maior error.invalid_request=⚠️ Solicitação inválida: {details}\n\nVerifique sua entrada e tente novamente. +error.local_server=⚠️ Erro no servidor de IA local!\n\nO processo do servidor de IA travou ou falhou ao carregar o modelo. Isso não é causado pelo Askimo.\n\nPossíveis causas:\n• O arquivo do modelo está corrompido ou incompleto — tente baixá-lo novamente\n• RAM/VRAM insuficiente — tente uma quantização menor (ex.: Q4 em vez de Q8)\n• Formato de modelo não suportado pela versão atual do servidor\n• O processo do servidor foi encerrado pelo sistema operacional (sem memória)\n\nO que fazer:\n1. Verifique os logs do seu servidor de IA local\n2. Reinicie o servidor e tente novamente\n3. Baixe o modelo novamente\n4. Tente um modelo diferente ou nível de quantização diferente\n\nDetalhes técnicos: {details} error.system=⚠️ Erro do sistema\n\nOcorreu um erro inesperado: {errorCode}\n\nEntre em contato com o suporte do Askimo e informe:\n• O que você estava fazendo\n• O código de erro acima\n• O horário (timestamp) # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_vi_VN.properties b/desktop-shared/src/main/resources/i18n/messages_vi_VN.properties index 931c73872..3016541aa 100644 --- a/desktop-shared/src/main/resources/i18n/messages_vi_VN.properties +++ b/desktop-shared/src/main/resources/i18n/messages_vi_VN.properties @@ -1028,6 +1028,7 @@ error.insufficient_credits=⚠️ Không đủ tín dụng\n\nSố dư tín dụ error.timeout=⚠️ Yêu cầu đã hết thời gian chờ sau {timeout} giây\n\nNguyên nhân có thể do:\n• Máy chủ đang quá tải - hãy thử lại sau ít phút\n• Truy vấn quá phức tạp - hãy thử đơn giản hóa\n• Độ trễ mạng error.context_length=⚠️ Đã vượt quá cửa sổ ngữ cảnh (context window)\n\nTổng dữ liệu đầu vào (lịch sử trò chuyện + tin nhắn của bạn + tệp đính kèm) quá lớn để mô hình này có thể xử lý.\n\nĐể khắc phục:\n• Bắt đầu một phiên trò chuyện mới để xóa lịch sử trò chuyện\n• Rút ngắn tin nhắn hoặc xóa các tệp đính kèm lớn\n• Nếu bạn đang sử dụng mô hình cục bộ (Ollama / LM Studio / Docker), hãy tăng kích thước ngữ cảnh trong phần cài đặt của mô hình đó\n• Chuyển sang mô hình có cửa sổ ngữ cảnh lớn hơn error.invalid_request=⚠️ Yêu cầu không hợp lệ: {details}\n\nVui lòng kiểm tra nội dung nhập và thử lại. +error.local_server=⚠️ Lỗi máy chủ AI cục bộ!\n\nTiến trình máy chủ AI đã bị sập hoặc không thể tải mô hình. Đây không phải lỗi do Askimo gây ra.\n\nNguyên nhân có thể:\n• Tệp mô hình bị hỏng hoặc không đầy đủ — thử tải lại\n• Không đủ RAM/VRAM — thử lượng tử hóa nhỏ hơn (ví dụ: Q4 thay vì Q8)\n• Định dạng mô hình không được hỗ trợ bởi phiên bản máy chủ hiện tại\n• Tiến trình máy chủ bị hệ điều hành kết thúc (hết bộ nhớ)\n\nCách xử lý:\n1. Kiểm tra nhật ký máy chủ AI cục bộ của bạn\n2. Khởi động lại máy chủ và thử lại\n3. Tải lại mô hình\n4. Thử mô hình khác hoặc mức lượng tử hóa khác\n\nChi tiết kỹ thuật: {details} error.system=⚠️ Lỗi hệ thống\n\nĐã xảy ra lỗi không mong muốn: {errorCode}\n\nVui lòng liên hệ hỗ trợ Askimo và cung cấp:\n• Bạn đang làm gì\n• Mã lỗi ở trên\n• Thời điểm xảy ra lỗi # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_zh_CN.properties b/desktop-shared/src/main/resources/i18n/messages_zh_CN.properties index 1df225e0d..d15cbbaf8 100644 --- a/desktop-shared/src/main/resources/i18n/messages_zh_CN.properties +++ b/desktop-shared/src/main/resources/i18n/messages_zh_CN.properties @@ -1030,6 +1030,7 @@ error.insufficient_credits=⚠️ 积分不足\n\n您的积分余额过低。\n\ error.timeout=⚠️ 请求在 {timeout} 秒后超时\n\n可能原因:\n• 服务器负载过高,请稍后重试\n• 请求过于复杂,请尝试简化\n• 网络延迟 error.context_length=⚠️ 上下文窗口已超出限制\n\n总输入内容(对话历史记录 + 您的消息 + 附件)太大,此模型无法处理。\n\n解决方法:\n• 开始新的聊天会话以清除对话历史记录\n• 缩短您的消息或删除较大的附件\n• 如果使用本地模型(Ollama / LM Studio / Docker),请在设置中增加上下文大小\n• 切换到具有更大上下文窗口的模型 error.invalid_request=⚠️ 无效请求:{details}\n\n请检查输入内容后重试。 +error.local_server=⚠️ 本地 AI 服务器错误!\n\nAI 服务器进程崩溃或无法加载模型。这不是由 Askimo 引起的。\n\n可能原因:\n• 模型文件损坏或不完整 — 请尝试重新下载\n• RAM/VRAM 不足 — 请尝试更小的量化版本(例如 Q4 而非 Q8)\n• 当前服务器版本不支持该模型格式\n• 服务器进程被操作系统终止(内存不足)\n\n处理方法:\n1. 查看本地 AI 服务器日志\n2. 重启服务器后重试\n3. 重新下载模型\n4. 尝试其他模型或量化级别\n\n技术详情:{details} error.system=⚠️ 系统错误\n\n发生了意外错误:{errorCode}\n\n请联系 Askimo 支持,并提供:\n• 您的操作步骤\n• 上述错误代码\n• 发生时间 # Model Availability Errors diff --git a/desktop-shared/src/main/resources/i18n/messages_zh_TW.properties b/desktop-shared/src/main/resources/i18n/messages_zh_TW.properties index 1b9b07eee..d006883a8 100644 --- a/desktop-shared/src/main/resources/i18n/messages_zh_TW.properties +++ b/desktop-shared/src/main/resources/i18n/messages_zh_TW.properties @@ -1031,6 +1031,7 @@ error.insufficient_credits=⚠️ 積分不足\n\n您的積分餘額過低。\n\ error.timeout=⚠️ 請求於 {timeout} 秒後逾時\n\n可能原因包括:\n• 伺服器負載過高,請稍後再試\n• 查詢內容過於複雜,請嘗試簡化\n• 網路延遲 error.context_length=⚠️ 上下文視窗已超出限制\n\n總輸入內容(對話歷史記錄 + 您的訊息 + 附件)太大,此模型無法處理。\n\n解決方法:\n• 開始新的聊天對話以清除對話歷史記錄\n• 縮短您的訊息或刪除較大的附件\n• 如果使用本地模型(Ollama / LM Studio / Docker),請在設定中增加上下文大小\n• 切換到具有更大上下文視窗的模型 error.invalid_request=⚠️ 無效的請求:{details}\n\n請檢查輸入內容後再試一次。 +error.local_server=⚠️ 本地 AI 伺服器錯誤!\n\nAI 伺服器程序崩潰或無法載入模型。這不是由 Askimo 所引起的。\n\n可能原因:\n• 模型檔案損毀或不完整 — 請嘗試重新下載\n• RAM/VRAM 不足 — 請嘗試較小的量化版本(例如 Q4 而非 Q8)\n• 目前伺服器版本不支援此模型格式\n• 伺服器程序被作業系統終止(記憶體不足)\n\n處理方式:\n1. 查看本地 AI 伺服器日誌\n2. 重新啟動伺服器後重試\n3. 重新下載模型\n4. 嘗試其他模型或量化等級\n\n技術詳情:{details} error.system=⚠️ 系統錯誤\n\n發生未預期的錯誤:{errorCode}\n\n請聯絡 Askimo 支援,並提供:\n• 您當時的操作\n• 上方的錯誤代碼\n• 發生的時間 # Model Availability Errors diff --git a/shared/src/main/kotlin/io/askimo/core/exception/ExceptionMapper.kt b/shared/src/main/kotlin/io/askimo/core/exception/ExceptionMapper.kt index 57e96a2e3..955c4c867 100644 --- a/shared/src/main/kotlin/io/askimo/core/exception/ExceptionMapper.kt +++ b/shared/src/main/kotlin/io/askimo/core/exception/ExceptionMapper.kt @@ -4,6 +4,7 @@ */ package io.askimo.core.exception +import dev.langchain4j.exception.InternalServerException import dev.langchain4j.exception.ModelNotFoundException import io.askimo.core.logging.logger import java.net.ConnectException @@ -98,6 +99,12 @@ object ExceptionMapper { cause = exception, ) + // Local AI server internal error (Ollama, Docker AI, LocalAI, LMStudio, etc.) + is InternalServerException -> LocalServerException( + details = exception.message ?: "", + cause = exception, + ) + // Add more type-based matches as needed else -> null } @@ -113,6 +120,15 @@ object ExceptionMapper { val combinedMessage = messages.joinToString(" | ") return when { + // Local AI server internal error – process crashed, model failed to load, etc. + // Covers Ollama, Docker AI, LocalAI, LMStudio, and any OpenAI-compatible local backend. + combinedMessage.contains("process has terminated", ignoreCase = true) || + combinedMessage.contains("llama-server", ignoreCase = true) || + combinedMessage.contains("llama_model_loader", ignoreCase = true) || + combinedMessage.contains("error loading model", ignoreCase = true) || + (combinedMessage.contains("api_error", ignoreCase = true) && combinedMessage.contains("exit status", ignoreCase = true)) -> + LocalServerException(details = combinedMessage.take(300), cause = rootCause) + // Network connectivity issues combinedMessage.contains("Connection refused", ignoreCase = true) || combinedMessage.contains("Network is unreachable", ignoreCase = true) || diff --git a/shared/src/main/kotlin/io/askimo/core/exception/UserException.kt b/shared/src/main/kotlin/io/askimo/core/exception/UserException.kt index e54cae1a5..086aede62 100644 --- a/shared/src/main/kotlin/io/askimo/core/exception/UserException.kt +++ b/shared/src/main/kotlin/io/askimo/core/exception/UserException.kt @@ -139,6 +139,22 @@ class ContextLengthException( override fun getMessageArgs() = emptyMap() } +/** + * Local AI server crashed, failed to load the model, or returned an unrecoverable internal error. + * Covers Ollama, Docker AI, LocalAI, LMStudio, and any other OpenAI-compatible local backend. + * + * This is non-retryable: the user must fix the underlying server/model issue first. + * + * @param details A short excerpt from the server error message for diagnostic display. + */ +class LocalServerException( + val details: String = "", + cause: Throwable? = null, +) : UserException("Local AI server error", cause) { + override fun getMessageKey() = "error.local_server" + override fun getMessageArgs() = mapOf("details" to details) +} + /** * No AI provider has been configured yet (currentProvider == UNKNOWN). */ diff --git a/shared/src/main/kotlin/io/askimo/core/providers/ChatClientExtensions.kt b/shared/src/main/kotlin/io/askimo/core/providers/ChatClientExtensions.kt index fb86c27f4..50c76eff0 100644 --- a/shared/src/main/kotlin/io/askimo/core/providers/ChatClientExtensions.kt +++ b/shared/src/main/kotlin/io/askimo/core/providers/ChatClientExtensions.kt @@ -5,9 +5,12 @@ package io.askimo.core.providers import dev.langchain4j.data.message.UserMessage +import dev.langchain4j.exception.InternalServerException import dev.langchain4j.model.googleai.GeneratedImageHelper import io.askimo.core.context.AppContext import io.askimo.core.context.ChatContext +import io.askimo.core.exception.ExceptionHandler +import io.askimo.core.exception.LocalServerException import io.askimo.core.exception.ToolExecutionException import io.askimo.core.intent.DetectAiResponseIntentCommand import io.askimo.core.intent.FollowUpSuggestion @@ -197,6 +200,26 @@ fun ChatClient.sendStreamingMessageWithCallback( return@onError } + // Check for local AI server internal errors (Ollama, Docker AI, LocalAI, LMStudio, etc.) + // These are non-retryable: the server crashed, the model is broken, or OOM. + val isLocalServerError = e is InternalServerException || + errorMessage.contains("process has terminated", ignoreCase = true) || + errorMessage.contains("llama-server", ignoreCase = true) || + errorMessage.contains("llama_model_loader", ignoreCase = true) || + errorMessage.contains("error loading model", ignoreCase = true) || + (errorMessage.contains("api_error", ignoreCase = true) && errorMessage.contains("exit status", ignoreCase = true)) + + if (isLocalServerError) { + isConfigurationError = true + val localServerErrorMsg = ExceptionHandler.handle( + LocalServerException(details = errorMessage, cause = e), + ) + sb.append(localServerErrorMsg) + onToken(localServerErrorMsg) + done.countDown() + return@onError + } + // Check if the underlying cause is a network connection issue if (e.cause is UnresolvedAddressException) { isConfigurationError = true