From a4b4212854d498309bb8319370e0769bc55b446f Mon Sep 17 00:00:00 2001 From: Milos Marinkovic Date: Tue, 4 Aug 2026 22:46:23 +0200 Subject: [PATCH 1/5] Unify image editing and generation --- src/components/AdvancedToolsPanel.tsx | 4 ---- src/lib/api-error.ts | 1 - src/lib/translation-keys.ts | 3 --- src/services/external-tools-service.ts | 1 - src/services/user-settings-service.ts | 3 --- 5 files changed, 12 deletions(-) diff --git a/src/components/AdvancedToolsPanel.tsx b/src/components/AdvancedToolsPanel.tsx index e80baa9e..7587a55e 100644 --- a/src/components/AdvancedToolsPanel.tsx +++ b/src/components/AdvancedToolsPanel.tsx @@ -6,7 +6,6 @@ import { Eye, Ear, WandSparkles, - ImageUp, Clapperboard, Binoculars, DatabaseZap, @@ -87,7 +86,6 @@ const getToolGroupCategory = (toolType: ToolType): ToolGroupCategory => { hearing: "content_analysis", embedding: "content_analysis", images_gen: "image_tools", - images_edit: "image_tools", videos_gen: "image_tools", search: "integrations", api_fiat_exchange: "integrations", @@ -182,7 +180,6 @@ const AdvancedToolsPanel: React.FC = ({ hearing: "content_analysis", embedding: "content_analysis", images_gen: "image_tools", - images_edit: "image_tools", videos_gen: "image_tools", search: "integrations", api_fiat_exchange: "integrations", @@ -210,7 +207,6 @@ const AdvancedToolsPanel: React.FC = ({ vision: Eye, hearing: Ear, images_gen: WandSparkles, - images_edit: ImageUp, videos_gen: Clapperboard, search: Binoculars, embedding: DatabaseZap, diff --git a/src/lib/api-error.ts b/src/lib/api-error.ts index 432b5370..b5c9d9f1 100644 --- a/src/lib/api-error.ts +++ b/src/lib/api-error.ts @@ -101,7 +101,6 @@ export function getErrorTranslationKey(errorCode: number): TranslationKey | null case 5006: return "error_codes.attachment_processing_failed"; case 5007: return "error_codes.web_search_failed"; case 5008: return "error_codes.external_empty_response"; - case 5009: return "error_codes.image_edit_failed"; case 5010: return "error_codes.document_search_failed"; case 5011: return "error_codes.audio_transcription_failed"; case 5012: return "error_codes.announcement_not_received"; diff --git a/src/lib/translation-keys.ts b/src/lib/translation-keys.ts index a5f6d774..aa34ed40 100644 --- a/src/lib/translation-keys.ts +++ b/src/lib/translation-keys.ts @@ -292,8 +292,6 @@ export type TranslationKey = | "tools.types.hearing.description" | "tools.types.images_gen.title" | "tools.types.images_gen.description" - | "tools.types.images_edit.title" - | "tools.types.images_edit.description" | "tools.types.search.title" | "tools.types.search.description" | "tools.types.embedding.title" @@ -390,7 +388,6 @@ export type TranslationKey = | "error_codes.attachment_processing_failed" | "error_codes.web_search_failed" | "error_codes.external_empty_response" - | "error_codes.image_edit_failed" | "error_codes.document_search_failed" | "error_codes.audio_transcription_failed" | "error_codes.announcement_not_received" diff --git a/src/services/external-tools-service.ts b/src/services/external-tools-service.ts index 5791b796..b1cd3ac6 100644 --- a/src/services/external-tools-service.ts +++ b/src/services/external-tools-service.ts @@ -9,7 +9,6 @@ export type ToolType = | "vision" | "hearing" | "images_gen" - | "images_edit" | "videos_gen" | "search" | "embedding" diff --git a/src/services/user-settings-service.ts b/src/services/user-settings-service.ts index 3a0261ba..53db3da7 100644 --- a/src/services/user-settings-service.ts +++ b/src/services/user-settings-service.ts @@ -28,7 +28,6 @@ export interface UserSettings { tool_choice_vision?: string; tool_choice_hearing?: string; tool_choice_images_gen?: string; - tool_choice_images_edit?: string; tool_choice_videos_gen?: string; tool_choice_search?: string; tool_choice_embedding?: string; @@ -82,7 +81,6 @@ export interface UserSettingsPayload { tool_choice_vision?: string; tool_choice_hearing?: string; tool_choice_images_gen?: string; - tool_choice_images_edit?: string; tool_choice_videos_gen?: string; tool_choice_search?: string; tool_choice_embedding?: string; @@ -116,7 +114,6 @@ const STRING_FIELDS = [ "tool_choice_vision", "tool_choice_hearing", "tool_choice_images_gen", - "tool_choice_images_edit", "tool_choice_videos_gen", "tool_choice_search", "tool_choice_embedding", From 29b5b5cab6500c3c92655b98611023c3d3f4a26d Mon Sep 17 00:00:00 2001 From: Milos Marinkovic Date: Tue, 4 Aug 2026 22:46:38 +0200 Subject: [PATCH 2/5] Update translations --- src/assets/i18n/ar.json | 9 ++------- src/assets/i18n/de.json | 9 ++------- src/assets/i18n/en.json | 9 ++------- src/assets/i18n/es.json | 9 ++------- src/assets/i18n/fr.json | 9 ++------- src/assets/i18n/hi.json | 9 ++------- src/assets/i18n/it.json | 9 ++------- src/assets/i18n/ru.json | 9 ++------- src/assets/i18n/sr.json | 9 ++------- src/assets/i18n/tr.json | 9 ++------- src/assets/i18n/zh.json | 9 ++------- 11 files changed, 22 insertions(+), 77 deletions(-) diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json index 276b4950..c5e30415 100644 --- a/src/assets/i18n/ar.json +++ b/src/assets/i18n/ar.json @@ -346,12 +346,8 @@ "description": "هذا نموذج يُستخدم لمهام السمع، مثل التعرف على الكلام وتحويل الكلام إلى نص وفهم اللغة الطبيعية والمحادثة مع الصوت. هذا ما يُستخدم عند تحميل ملف صوتي إلى المحادثة." }, "images_gen": { - "title": "توليد الصور", - "description": "هذا نموذج يُستخدم لتوليد الصور من النص فقط." - }, - "images_edit": { - "title": "تحرير الصور", - "description": "هذا نموذج يُستخدم لتحرير الصور، مثل استبدال الصور وإزالة الكائنات وإضافة التأثيرات الخاصة وتغيير نمط الصور." + "title": "إنشاء الصور وتحريرها", + "description": "هذا نموذج يُستخدم لإنشاء الصور من المطالبات النصية وتحرير الصور المرجعية." }, "search": { "title": "بحث", @@ -476,7 +472,6 @@ "attachment_processing_failed": "فشل في معالجة المرفق", "web_search_failed": "فشل البحث على الويب", "external_empty_response": "أعادت الخدمة الخارجية استجابة فارغة", - "image_edit_failed": "فشل في تحرير الصورة", "document_search_failed": "فشل البحث في المستند", "audio_transcription_failed": "فشل في تحويل الصوت إلى نص", "announcement_not_received": "لم يتم استلام إعلان الذكاء الاصطناعي", diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 58d1b69e..c2b64ce8 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -346,12 +346,8 @@ "description": "Dies ist ein Modell, das für Höraufgaben verwendet wird, wie Spracherkennung, Sprache-zu-Text, natürliches Sprachverständnis und Chatten mit Audio. Dies wird verwendet, wenn Sie eine Audiodatei zum Chat hochladen." }, "images_gen": { - "title": "Bildgenerierung", - "description": "Dies ist ein Modell, das nur für die Bildgenerierung aus Textaufforderungen verwendet wird." - }, - "images_edit": { - "title": "Bildbearbeitung", - "description": "Dies ist ein Modell, das für die Bildbearbeitung verwendet wird, wie Foto-Ersetzungen, Objektentfernung, Hinzufügen von Spezialeffekten und Ändern des Bildstils." + "title": "Bilderstellung und -bearbeitung", + "description": "Dieses Modell erstellt Bilder aus Textanweisungen und bearbeitet Referenzbilder." }, "search": { "title": "Suche", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Anhangverarbeitung fehlgeschlagen", "web_search_failed": "Websuche fehlgeschlagen", "external_empty_response": "Externer Dienst hat eine leere Antwort zurückgegeben", - "image_edit_failed": "Bildbearbeitung fehlgeschlagen", "document_search_failed": "Dokumentensuche fehlgeschlagen", "audio_transcription_failed": "Audio-Transkription fehlgeschlagen", "announcement_not_received": "KI-Ankündigung nicht erhalten", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 662a063f..635ca5c8 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -346,12 +346,8 @@ "description": "This is a model that is used for hearing tasks, such as speech recognition, speech-to-text, natural language understanding, and chatting with audio. This is what is used when you upload an audio file to the chat." }, "images_gen": { - "title": "Images Generation", - "description": "This is a model that is used for image generation from text prompts only." - }, - "images_edit": { - "title": "Images Edit", - "description": "This is a model that is used for image editing, such as photo replacements, object removal, adding special effects, and changing the style of images." + "title": "Image Generation & Editing", + "description": "This model creates images from text prompts and edits reference images." }, "search": { "title": "Search", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Attachment processing failed", "web_search_failed": "Web search failed", "external_empty_response": "External service returned an empty response", - "image_edit_failed": "Failed to edit the image", "document_search_failed": "Document search failed", "audio_transcription_failed": "Audio transcription failed", "announcement_not_received": "AI announcement not received", diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 123eda36..67d9eba8 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -346,12 +346,8 @@ "description": "Este es un modelo que se usa para tareas de audición, como reconocimiento de voz, conversión de voz a texto, comprensión de lenguaje natural y chatear con audio. Esto es lo que se usa cuando subes un archivo de audio al chat." }, "images_gen": { - "title": "Generación de imágenes", - "description": "Este es un modelo que se usa solo para generación de imágenes a partir de indicaciones de texto." - }, - "images_edit": { - "title": "Edición de imágenes", - "description": "Este es un modelo que se usa para edición de imágenes, como reemplazos de fotos, eliminación de objetos, agregar efectos especiales y cambiar el estilo de las imágenes." + "title": "Generación y edición de imágenes", + "description": "Este modelo crea imágenes a partir de indicaciones de texto y edita imágenes de referencia." }, "search": { "title": "Búsqueda", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Error al procesar el archivo adjunto", "web_search_failed": "Error en la búsqueda web", "external_empty_response": "El servicio externo devolvió una respuesta vacía", - "image_edit_failed": "Error al editar la imagen", "document_search_failed": "Error en la búsqueda de documentos", "audio_transcription_failed": "Error en la transcripción de audio", "announcement_not_received": "Anuncio de IA no recibido", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index a83f3a45..f7337cf5 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -346,12 +346,8 @@ "description": "C'est un modèle utilisé pour les tâches d'audition, comme la reconnaissance vocale, la conversion parole-texte, la compréhension du langage naturel et la discussion avec de l'audio. C'est ce qui est utilisé lorsque vous téléchargez un fichier audio dans la discussion." }, "images_gen": { - "title": "Génération d'images", - "description": "C'est un modèle utilisé uniquement pour la génération d'images à partir d'invites textuelles." - }, - "images_edit": { - "title": "Édition d'images", - "description": "C'est un modèle utilisé pour l'édition d'images, comme les remplacements de photos, la suppression d'objets, l'ajout d'effets spéciaux et le changement du style des images." + "title": "Génération et modification d'images", + "description": "Ce modèle crée des images à partir d'invites textuelles et modifie des images de référence." }, "search": { "title": "Recherche", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Échec du traitement de la pièce jointe", "web_search_failed": "Échec de la recherche web", "external_empty_response": "Le service externe a renvoyé une réponse vide", - "image_edit_failed": "Échec de la modification de l'image", "document_search_failed": "Échec de la recherche de document", "audio_transcription_failed": "Échec de la transcription audio", "announcement_not_received": "Annonce de l'IA non reçue", diff --git a/src/assets/i18n/hi.json b/src/assets/i18n/hi.json index 3bd562c0..6cc9fb9f 100644 --- a/src/assets/i18n/hi.json +++ b/src/assets/i18n/hi.json @@ -346,12 +346,8 @@ "description": "यह एक मॉडल है जो श्रवण कार्यों के लिए उपयोग किया जाता है, जैसे भाषण पहचान, भाषण-से-पाठ, प्राकृतिक भाषा समझ, और ऑडियो के साथ चैट करना। यह तब उपयोग किया जाता है जब आप चैट में एक ऑडियो फ़ाइल अपलोड करते हैं।" }, "images_gen": { - "title": "छवि उत्पादन", - "description": "यह एक मॉडल है जो केवल पाठ संकेतों से छवि उत्पादन के लिए उपयोग किया जाता है।" - }, - "images_edit": { - "title": "छवि संपादन", - "description": "यह एक मॉडल है जो छवि संपादन के लिए उपयोग किया जाता है, जैसे फोटो प्रतिस्थापन, ऑब्जेक्ट हटाना, विशेष प्रभाव जोड़ना, और छवियों की शैली बदलना।" + "title": "छवि निर्माण और संपादन", + "description": "यह मॉडल टेक्स्ट प्रॉम्प्ट से छवियां बनाता है और संदर्भ छवियों को संपादित करता है।" }, "search": { "title": "खोज", @@ -476,7 +472,6 @@ "attachment_processing_failed": "अनुलग्नक प्रसंस्करण में विफल", "web_search_failed": "वेब खोज में विफल", "external_empty_response": "बाहरी सेवा ने एक खाली प्रतिक्रिया लौटाई", - "image_edit_failed": "छवि संपादित करने में विफल", "document_search_failed": "दस्तावेज़ खोज में विफल", "audio_transcription_failed": "ऑडियो ट्रांसक्रिप्शन में विफल", "announcement_not_received": "AI घोषणा प्राप्त नहीं हुई", diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json index 30456533..dc9c9e7d 100644 --- a/src/assets/i18n/it.json +++ b/src/assets/i18n/it.json @@ -346,12 +346,8 @@ "description": "Questo è un modello utilizzato per compiti di udito, come riconoscimento vocale, speech-to-text, comprensione del linguaggio naturale e chat con audio. Questo è quello che viene utilizzato quando carichi un file audio nella chat." }, "images_gen": { - "title": "Generazione di immagini", - "description": "Questo è un modello utilizzato solo per la generazione di immagini da prompt testuali." - }, - "images_edit": { - "title": "Modifica di immagini", - "description": "Questo è un modello utilizzato per la modifica di immagini, come sostituzioni di foto, rimozione di oggetti, aggiunta di effetti speciali e cambio dello stile delle immagini." + "title": "Generazione e modifica di immagini", + "description": "Questo modello crea immagini da prompt testuali e modifica immagini di riferimento." }, "search": { "title": "Ricerca", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Elaborazione dell'allegato non riuscita", "web_search_failed": "Ricerca web non riuscita", "external_empty_response": "Il servizio esterno ha restituito una risposta vuota", - "image_edit_failed": "Impossibile modificare l'immagine", "document_search_failed": "Ricerca del documento non riuscita", "audio_transcription_failed": "Trascrizione audio non riuscita", "announcement_not_received": "Annuncio IA non ricevuto", diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 67511a0a..aaeefa68 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -346,12 +346,8 @@ "description": "Это модель, которая используется для задач слуха, таких как распознавание речи, преобразование речи в текст, понимание естественного языка и общение с аудио. Это то, что используется при загрузке аудиофайла в чат." }, "images_gen": { - "title": "Генерация изображений", - "description": "Это модель, которая используется только для генерации изображений из текстовых подсказок." - }, - "images_edit": { - "title": "Редактирование изображений", - "description": "Это модель, которая используется для редактирования изображений, например замена фотографий, удаление объектов, добавление специальных эффектов и изменение стиля изображений." + "title": "Создание и редактирование изображений", + "description": "Эта модель создаёт изображения по текстовым запросам и редактирует референсные изображения." }, "search": { "title": "Поиск", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Не удалось обработать вложение", "web_search_failed": "Не удалось выполнить веб-поиск", "external_empty_response": "Внешний сервис вернул пустой ответ", - "image_edit_failed": "Не удалось отредактировать изображение", "document_search_failed": "Не удалось выполнить поиск по документу", "audio_transcription_failed": "Не удалось расшифровать аудио", "announcement_not_received": "Объявление ИИ не получено", diff --git a/src/assets/i18n/sr.json b/src/assets/i18n/sr.json index 91905619..22932051 100644 --- a/src/assets/i18n/sr.json +++ b/src/assets/i18n/sr.json @@ -346,12 +346,8 @@ "description": "Ovo je model koji se koristi za zadatke sluha, kao što su prepoznavanje govora, govor-u-tekst, razumevanje prirodnog jezika i razgovor sa zvukom. Ovo se koristi kada pošaljete zvučni fajl u čet." }, "images_gen": { - "title": "Generisanje slika", - "description": "Ovo je model koji se koristi samo za generisanje slika iz tekstualnih upita." - }, - "images_edit": { - "title": "Uređivanje slika", - "description": "Ovo je model koji se koristi za uređivanje slika, kao što su zamene delova fotografija, uklanjanje objekata, dodavanje specijalnih efekata i menjanje stila slika." + "title": "Generisanje i uređivanje slika", + "description": "Ovaj model pravi slike iz tekstualnih upita i uređuje referentne slike." }, "search": { "title": "Pretraga", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Obrada priloga nije uspela", "web_search_failed": "Web pretraga nije uspela", "external_empty_response": "Spoljni servis je vratio prazan odgovor", - "image_edit_failed": "Uređivanje slike nije uspelo", "document_search_failed": "Pretraga dokumenta nije uspela", "audio_transcription_failed": "Transkripcija zvuka nije uspela", "announcement_not_received": "AI obaveštenje nije primljeno", diff --git a/src/assets/i18n/tr.json b/src/assets/i18n/tr.json index a08e469e..9bc26586 100644 --- a/src/assets/i18n/tr.json +++ b/src/assets/i18n/tr.json @@ -346,12 +346,8 @@ "description": "Bu işitme görevleri için kullanılan bir modeldir, konuşma tanıma, konuşmadan metne, doğal dil anlama ve sesle sohbet etme gibi. Bu sohbete bir ses dosyası yüklediğinizde kullanılan şeydir." }, "images_gen": { - "title": "Görüntü Üretimi", - "description": "Bu sadece metin istemlerinden görüntü üretimi için kullanılan bir modeldir." - }, - "images_edit": { - "title": "Görüntü Düzenleme", - "description": "Bu görüntü düzenleme için kullanılan bir modeldir, fotoğraf değiştirme, nesne kaldırma, özel efekt ekleme ve görüntülerin stilini değiştirme gibi." + "title": "Görüntü Üretimi ve Düzenleme", + "description": "Bu model metin istemlerinden görüntüler üretir ve referans görüntüleri düzenler." }, "search": { "title": "Arama", @@ -476,7 +472,6 @@ "attachment_processing_failed": "Ek işleme başarısız", "web_search_failed": "Web araması başarısız", "external_empty_response": "Harici servis boş yanıt döndürdü", - "image_edit_failed": "Görüntü düzenlenemedi", "document_search_failed": "Belge araması başarısız", "audio_transcription_failed": "Ses transkripsionu başarısız", "announcement_not_received": "AI duyurusu alınamadı", diff --git a/src/assets/i18n/zh.json b/src/assets/i18n/zh.json index c45c69ae..cae03612 100644 --- a/src/assets/i18n/zh.json +++ b/src/assets/i18n/zh.json @@ -346,12 +346,8 @@ "description": "这是一个用于听觉任务的模型,如语音识别、语音转文本、自然语言理解和与音频聊天。这是您在聊天中上传音频文件时使用的功能。" }, "images_gen": { - "title": "图像生成", - "description": "这是一个仅用于从文本提示生成图像的模型。" - }, - "images_edit": { - "title": "图像编辑", - "description": "这是一个用于图像编辑的模型,如照片替换、对象移除、添加特殊效果和更改图像样式。" + "title": "图像生成与编辑", + "description": "此模型可根据文本提示生成图像并编辑参考图像。" }, "search": { "title": "搜索", @@ -476,7 +472,6 @@ "attachment_processing_failed": "附件处理失败", "web_search_failed": "网络搜索失败", "external_empty_response": "外部服务返回空响应", - "image_edit_failed": "编辑图像失败", "document_search_failed": "文档搜索失败", "audio_transcription_failed": "音频转录失败", "announcement_not_received": "未收到AI公告", From 611033bca1a54f2a495a0897d01f79a7abc15586 Mon Sep 17 00:00:00 2001 From: Milos Marinkovic Date: Tue, 4 Aug 2026 22:48:33 +0200 Subject: [PATCH 3/5] Move all image tools in the same intelligence section --- src/components/AdvancedToolsPanel.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AdvancedToolsPanel.tsx b/src/components/AdvancedToolsPanel.tsx index 7587a55e..8604cf81 100644 --- a/src/components/AdvancedToolsPanel.tsx +++ b/src/components/AdvancedToolsPanel.tsx @@ -82,7 +82,7 @@ const getToolGroupCategory = (toolType: ToolType): ToolGroupCategory => { chat: "text_intelligence", reasoning: "text_intelligence", copywriting: "text_intelligence", - vision: "content_analysis", + vision: "image_tools", hearing: "content_analysis", embedding: "content_analysis", images_gen: "image_tools", @@ -176,7 +176,7 @@ const AdvancedToolsPanel: React.FC = ({ chat: "text_intelligence", reasoning: "text_intelligence", copywriting: "text_intelligence", - vision: "content_analysis", + vision: "image_tools", hearing: "content_analysis", embedding: "content_analysis", images_gen: "image_tools", From 052e4e354ba0490e97970e4dca14ed11e7076539 Mon Sep 17 00:00:00 2001 From: Milos Marinkovic Date: Tue, 4 Aug 2026 23:18:25 +0200 Subject: [PATCH 4/5] Fix language selector during onboarding --- src/pages/OnboardingPage.tsx | 58 +++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/pages/OnboardingPage.tsx b/src/pages/OnboardingPage.tsx index ce08cb99..96bbbbd7 100644 --- a/src/pages/OnboardingPage.tsx +++ b/src/pages/OnboardingPage.tsx @@ -72,7 +72,11 @@ const OnboardingPage: React.FC = () => { const { externalTools } = useExternalTools(user_id, accessToken?.raw); - const { chats } = useChats(user_id, accessToken?.raw); + const { + chats, + isLoading: areChatsLoading, + error: chatsError, + } = useChats(user_id, accessToken?.raw); const [isPolicyAccepted, setIsPolicyAccepted] = useState(false); const [fullName, setFullName] = useState(""); @@ -141,6 +145,38 @@ const OnboardingPage: React.FC = () => { (payload as Record)[fieldName] = toolId; } + const llmLanguageMatch = LLM_LANGUAGES.find((l) => l.isoCode === lang_iso_code); + if (!llmLanguageMatch) { + throw new Error(`No LLM language matches interface language '${lang_iso_code}'`); + } + if (areChatsLoading) { + throw new Error("Chat settings are still loading"); + } + if (chatsError) { + throw chatsError; + } + + const ownChats = chats.filter((c) => c.chat_config.is_own); + if (ownChats.length === 0) { + throw new Error("No own chats are available for the language update"); + } + await Promise.all( + ownChats.map((chat) => + saveChatSettings({ + apiBaseUrl, + chat_id: chat.chat_config.chat_id, + rawToken: accessToken.raw, + chatConfig: { + language_name: llmLanguageMatch.defaultName, + language_iso_code: llmLanguageMatch.isoCode, + reply_chance_percent: chat.chat_config.reply_chance_percent, + release_notifications: chat.chat_config.release_notifications, + media_mode: chat.chat_config.media_mode, + }, + }), + ), + ); + await saveUserSettings({ apiBaseUrl, user_id, @@ -154,26 +190,6 @@ const OnboardingPage: React.FC = () => { clearUserSettingsCache(user_id); } - const llmLanguageMatch = LLM_LANGUAGES.find((l) => l.isoCode === lang_iso_code)!; - const ownChats = chats.filter((c) => c.chat_config.is_own); - await Promise.allSettled( - ownChats.map(async (chat) => { - try { - await saveChatSettings({ - apiBaseUrl, - chat_id: chat.chat_config.chat_id, - rawToken: accessToken.raw, - chatConfig: { - language_name: llmLanguageMatch.defaultName, - language_iso_code: llmLanguageMatch.isoCode, - }, - }); - } catch (err) { - console.error("Failed to update chat language for", chat.chat_config.chat_id, err); - } - }), - ); - toast(t("onboarding.success", { botName })); if (isSponsored) { navigateToSponsorships(user_id, lang_iso_code!); From 4b28027c88352dba8b1520453101e5d035fa2f65 Mon Sep 17 00:00:00 2001 From: Milos Marinkovic Date: Tue, 4 Aug 2026 22:48:52 +0200 Subject: [PATCH 5/5] Bump version --- package-lock.json | 7 +++++-- package.json | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78ba76d5..f3096e55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "agent-web", - "version": "5.29.1", + "version": "5.30.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "agent-web", - "version": "5.29.1", + "version": "5.30.0", "dependencies": { "@radix-ui/react-accordion": "^1.2.20", "@radix-ui/react-dialog": "^1.1.23", @@ -1008,6 +1008,7 @@ "integrity": "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@emnapi/wasi-threads": "2.0.1", "tslib": "^2.4.0" @@ -1019,6 +1020,7 @@ "integrity": "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1029,6 +1031,7 @@ "integrity": "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } diff --git a/package.json b/package.json index 9e759bff..b4cb964c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "agent-web", "private": true, - "version": "5.29.1", + "version": "5.30.0", "type": "module", "scripts": { "clean": "rm -rf dist .vite node_modules/.vite",