diff --git a/.changeset/ninety-berries-change.md b/.changeset/ninety-berries-change.md new file mode 100644 index 0000000000..08d7cba3d9 --- /dev/null +++ b/.changeset/ninety-berries-change.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Allow manually selecting a model in the model picker diff --git a/webview-ui/src/components/settings/ModelPicker.tsx b/webview-ui/src/components/settings/ModelPicker.tsx index 0e3bf4e856..e4e848478c 100644 --- a/webview-ui/src/components/settings/ModelPicker.tsx +++ b/webview-ui/src/components/settings/ModelPicker.tsx @@ -68,14 +68,17 @@ export const ModelPicker = ({ [apiConfiguration], ) - const [searchValue, setSearchValue] = useState(selectedModelId) + const [searchValue, setSearchValue] = useState(selectedModelId || "") const onSelect = useCallback( (modelId: string) => { + if (!modelId) return + setOpen(false) const modelInfo = models?.[modelId] setApiConfigurationField(modelIdKey, modelId) setApiConfigurationField(modelInfoKey, modelInfo ?? defaultModelInfo) + // Delay to ensure the popover is closed before setting the search value. setTimeout(() => setSearchValue(modelId), 100) }, @@ -112,7 +115,7 @@ export const ModelPicker = ({ return ( <>
- +
- No model found. + + {searchValue && ( +
+ {t("settings:modelPicker.noMatchFound")} +
+ )} +
{modelIds.map((model) => ( @@ -160,6 +169,13 @@ export const ModelPicker = ({ ))}
+ {searchValue && !modelIds.includes(searchValue) && ( +
+ + {t("settings:modelPicker.useCustomModel", { modelId: searchValue })} + +
+ )} diff --git a/webview-ui/src/components/settings/__tests__/ModelPicker.test.tsx b/webview-ui/src/components/settings/__tests__/ModelPicker.test.tsx index a0e6e1440c..010f26a930 100644 --- a/webview-ui/src/components/settings/__tests__/ModelPicker.test.tsx +++ b/webview-ui/src/components/settings/__tests__/ModelPicker.test.tsx @@ -86,4 +86,49 @@ describe("ModelPicker", () => { expect(mockSetApiConfigurationField).toHaveBeenCalledWith(defaultProps.modelIdKey, "model2") expect(mockSetApiConfigurationField).toHaveBeenCalledWith(defaultProps.modelInfoKey, mockModels.model2) }) + + it("allows setting a custom model ID that's not in the predefined list", async () => { + await act(async () => { + render() + }) + + await act(async () => { + // Open the popover by clicking the button. + const button = screen.getByRole("combobox") + fireEvent.click(button) + }) + + // Wait for popover to open and animations to complete. + await act(async () => { + await new Promise((resolve) => setTimeout(resolve, 100)) + }) + + const customModelId = "custom-model-id" + + await act(async () => { + // Find and set the input value to a custom model ID + const modelInput = screen.getByTestId("model-input") + fireEvent.input(modelInput, { target: { value: customModelId } }) + }) + + // Wait for the UI to update + await act(async () => { + await new Promise((resolve) => setTimeout(resolve, 100)) + }) + + // Find and click the "Use custom" option + await act(async () => { + // Look for text containing our custom model ID + const customOption = screen.getByTestId("use-custom-model") + fireEvent.click(customOption) + }) + + // Verify the API config was updated with the custom model ID + expect(mockSetApiConfigurationField).toHaveBeenCalledWith(defaultProps.modelIdKey, customModelId) + // The model info should be set to the default since this is a custom model + expect(mockSetApiConfigurationField).toHaveBeenCalledWith( + defaultProps.modelInfoKey, + defaultProps.defaultModelInfo, + ) + }) }) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 03f4842ce8..70382c77b8 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -353,7 +353,11 @@ "azureApiVersion": "Establir versió de l'API d'Azure" }, "modelPicker": { - "automaticFetch": "L'extensió obté automàticament la llista més recent de models disponibles a {{serviceName}}. Si no esteu segur de quin model triar, Roo Code funciona millor amb {{defaultModelId}}. També podeu cercar \"free\" per a opcions gratuïtes actualment disponibles." + "automaticFetch": "L'extensió obté automàticament la llista més recent de models disponibles a {{serviceName}}. Si no esteu segur de quin model triar, Roo Code funciona millor amb {{defaultModelId}}. També podeu cercar \"free\" per a opcions gratuïtes actualment disponibles.", + "label": "Model", + "searchPlaceholder": "Cerca", + "noMatchFound": "No s'ha trobat cap coincidència", + "useCustomModel": "Utilitzar personalitzat: {{modelId}}" }, "footer": { "feedback": "Si teniu qualsevol pregunta o comentari, no dubteu a obrir un issue a github.com/RooVetGit/Roo-Code o unir-vos a reddit.com/r/RooCode o discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 3255d86417..72f8410e5a 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "Die Erweiterung ruft automatisch die neueste Liste der verfügbaren Modelle von {{serviceName}} ab. Wenn Sie sich nicht sicher sind, welches Modell Sie wählen sollen, funktioniert Roo Code am besten mit {{defaultModelId}}. Sie können auch nach \"free\" suchen, um derzeit verfügbare kostenlose Optionen zu finden." + "automaticFetch": "Die Erweiterung ruft automatisch die neueste Liste der verfügbaren Modelle von {{serviceName}} ab. Wenn Sie sich nicht sicher sind, welches Modell Sie wählen sollen, funktioniert Roo Code am besten mit {{defaultModelId}}. Sie können auch nach \"free\" suchen, um derzeit verfügbare kostenlose Optionen zu finden.", + "label": "Modell", + "searchPlaceholder": "Suchen", + "noMatchFound": "Keine Übereinstimmung gefunden", + "useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}" }, "footer": { "feedback": "Wenn Sie Fragen oder Feedback haben, können Sie gerne ein Issue auf github.com/RooVetGit/Roo-Code öffnen oder reddit.com/r/RooCode oder discord.gg/roocode beitreten", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 0db175bbc4..4ed928c40c 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "The extension automatically fetches the latest list of models available on {{serviceName}}. If you're unsure which model to choose, Roo Code works best with {{defaultModelId}}. You can also try searching \"free\" for no-cost options currently available." + "automaticFetch": "The extension automatically fetches the latest list of models available on {{serviceName}}. If you're unsure which model to choose, Roo Code works best with {{defaultModelId}}. You can also try searching \"free\" for no-cost options currently available.", + "label": "Model", + "searchPlaceholder": "Search", + "noMatchFound": "No match found", + "useCustomModel": "Use custom: {{modelId}}" }, "footer": { "feedback": "If you have any questions or feedback, feel free to open an issue at github.com/RooVetGit/Roo-Code or join reddit.com/r/RooCode or discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index be3b94f67e..00523ac834 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "La extensión obtiene automáticamente la lista más reciente de modelos disponibles en {{serviceName}}. Si no está seguro de qué modelo elegir, Roo Code funciona mejor con {{defaultModelId}}. También puede buscar \"free\" para opciones sin costo actualmente disponibles." + "automaticFetch": "La extensión obtiene automáticamente la lista más reciente de modelos disponibles en {{serviceName}}. Si no está seguro de qué modelo elegir, Roo Code funciona mejor con {{defaultModelId}}. También puede buscar \"free\" para opciones sin costo actualmente disponibles.", + "label": "Modelo", + "searchPlaceholder": "Buscar", + "noMatchFound": "No se encontraron coincidencias", + "useCustomModel": "Usar personalizado: {{modelId}}" }, "footer": { "feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en github.com/RooVetGit/Roo-Code o unirse a reddit.com/r/RooCode o discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index db88ba7603..d083511449 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "L'extension récupère automatiquement la liste la plus récente des modèles disponibles sur {{serviceName}}. Si vous ne savez pas quel modèle choisir, Roo Code fonctionne mieux avec {{defaultModelId}}. Vous pouvez également rechercher \"free\" pour les options gratuites actuellement disponibles." + "automaticFetch": "L'extension récupère automatiquement la liste la plus récente des modèles disponibles sur {{serviceName}}. Si vous ne savez pas quel modèle choisir, Roo Code fonctionne mieux avec {{defaultModelId}}. Vous pouvez également rechercher \"free\" pour les options gratuites actuellement disponibles.", + "label": "Modèle", + "searchPlaceholder": "Rechercher", + "noMatchFound": "Aucune correspondance trouvée", + "useCustomModel": "Utiliser personnalisé : {{modelId}}" }, "footer": { "feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur github.com/RooVetGit/Roo-Code ou à rejoindre reddit.com/r/RooCode ou discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index df28cb0607..2b02f74285 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "एक्सटेंशन {{serviceName}} पर उपलब्ध मॉडलों की नवीनतम सूची स्वचालित रूप से प्राप्त करता है। यदि आप अनिश्चित हैं कि कौन सा मॉडल चुनना है, तो Roo Code {{defaultModelId}} के साथ सबसे अच्छा काम करता है। आप वर्तमान में उपलब्ध निःशुल्क विकल्पों के लिए \"free\" भी खोज सकते हैं।" + "automaticFetch": "एक्सटेंशन {{serviceName}} पर उपलब्ध मॉडलों की नवीनतम सूची स्वचालित रूप से प्राप्त करता है। यदि आप अनिश्चित हैं कि कौन सा मॉडल चुनना है, तो Roo Code {{defaultModelId}} के साथ सबसे अच्छा काम करता है। आप वर्तमान में उपलब्ध निःशुल्क विकल्पों के लिए \"free\" भी खोज सकते हैं।", + "label": "मॉडल", + "searchPlaceholder": "खोजें", + "noMatchFound": "कोई मिलान नहीं मिला", + "useCustomModel": "कस्टम उपयोग करें: {{modelId}}" }, "footer": { "feedback": "यदि आपके कोई प्रश्न या प्रतिक्रिया है, तो github.com/RooVetGit/Roo-Code पर एक मुद्दा खोलने या reddit.com/r/RooCode या discord.gg/roocode में शामिल होने में संकोच न करें", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 24f1b61692..23b99811fd 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "L'estensione recupera automaticamente l'elenco più recente dei modelli disponibili su {{serviceName}}. Se non sei sicuro di quale modello scegliere, Roo Code funziona meglio con {{defaultModelId}}. Puoi anche cercare \"free\" per opzioni gratuite attualmente disponibili." + "automaticFetch": "L'estensione recupera automaticamente l'elenco più recente dei modelli disponibili su {{serviceName}}. Se non sei sicuro di quale modello scegliere, Roo Code funziona meglio con {{defaultModelId}}. Puoi anche cercare \"free\" per opzioni gratuite attualmente disponibili.", + "label": "Modello", + "searchPlaceholder": "Cerca", + "noMatchFound": "Nessuna corrispondenza trovata", + "useCustomModel": "Usa personalizzato: {{modelId}}" }, "footer": { "feedback": "Se hai domande o feedback, sentiti libero di aprire un issue su github.com/RooVetGit/Roo-Code o unirti a reddit.com/r/RooCode o discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index fa88228fc0..3c7dc35108 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "拡張機能は{{serviceName}}で利用可能な最新のモデルリストを自動的に取得します。どのモデルを選ぶべきか迷っている場合、Roo Codeは{{defaultModelId}}で最適に動作します。また、「free」で検索すると、現在利用可能な無料オプションを見つけることができます。" + "automaticFetch": "拡張機能は{{serviceName}}で利用可能な最新のモデルリストを自動的に取得します。どのモデルを選ぶべきか迷っている場合、Roo Codeは{{defaultModelId}}で最適に動作します。また、「free」で検索すると、現在利用可能な無料オプションを見つけることができます。", + "label": "モデル", + "searchPlaceholder": "検索", + "noMatchFound": "一致するものが見つかりません", + "useCustomModel": "カスタムを使用: {{modelId}}" }, "footer": { "feedback": "質問やフィードバックがある場合は、github.com/RooVetGit/Roo-Codeで問題を開くか、reddit.com/r/RooCodediscord.gg/roocodeに参加してください", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 031d0a8139..2087119d63 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "확장 프로그램은 {{serviceName}}에서 사용 가능한 최신 모델 목록을 자동으로 가져옵니다. 어떤 모델을 선택해야 할지 확실하지 않다면, Roo Code는 {{defaultModelId}}로 가장 잘 작동합니다. 현재 사용 가능한 무료 옵션을 찾으려면 \"free\"를 검색해 볼 수도 있습니다." + "automaticFetch": "확장 프로그램은 {{serviceName}}에서 사용 가능한 최신 모델 목록을 자동으로 가져옵니다. 어떤 모델을 선택해야 할지 확실하지 않다면, Roo Code는 {{defaultModelId}}로 가장 잘 작동합니다. 현재 사용 가능한 무료 옵션을 찾으려면 \"free\"를 검색해 볼 수도 있습니다.", + "label": "모델", + "searchPlaceholder": "검색", + "noMatchFound": "일치하는 항목 없음", + "useCustomModel": "사용자 정의 사용: {{modelId}}" }, "footer": { "feedback": "질문이나 피드백이 있으시면 github.com/RooVetGit/Roo-Code에서 이슈를 열거나 reddit.com/r/RooCode 또는 discord.gg/roocode에 가입하세요", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 3626f6647c..574c4108ba 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "Rozszerzenie automatycznie pobiera najnowszą listę modeli dostępnych w {{serviceName}}. Jeśli nie jesteś pewien, który model wybrać, Roo Code działa najlepiej z {{defaultModelId}}. Możesz również wyszukać \"free\", aby znaleźć obecnie dostępne opcje bezpłatne." + "automaticFetch": "Rozszerzenie automatycznie pobiera najnowszą listę modeli dostępnych w {{serviceName}}. Jeśli nie jesteś pewien, który model wybrać, Roo Code działa najlepiej z {{defaultModelId}}. Możesz również wyszukać \"free\", aby znaleźć obecnie dostępne opcje bezpłatne.", + "label": "Model", + "searchPlaceholder": "Wyszukaj", + "noMatchFound": "Nie znaleziono dopasowań", + "useCustomModel": "Użyj niestandardowy: {{modelId}}" }, "footer": { "feedback": "Jeśli masz jakiekolwiek pytania lub opinie, śmiało otwórz zgłoszenie na github.com/RooVetGit/Roo-Code lub dołącz do reddit.com/r/RooCode lub discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 1b309fb447..b18be604a2 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "A extensão busca automaticamente a lista mais recente de modelos disponíveis em {{serviceName}}. Se você não tem certeza sobre qual modelo escolher, o Roo Code funciona melhor com {{defaultModelId}}. Você também pode pesquisar por \"free\" para encontrar opções gratuitas atualmente disponíveis." + "automaticFetch": "A extensão busca automaticamente a lista mais recente de modelos disponíveis em {{serviceName}}. Se você não tem certeza sobre qual modelo escolher, o Roo Code funciona melhor com {{defaultModelId}}. Você também pode pesquisar por \"free\" para encontrar opções gratuitas atualmente disponíveis.", + "label": "Modelo", + "searchPlaceholder": "Pesquisar", + "noMatchFound": "Nenhuma correspondência encontrada", + "useCustomModel": "Usar personalizado: {{modelId}}" }, "footer": { "feedback": "Se tiver alguma dúvida ou feedback, sinta-se à vontade para abrir um problema em github.com/RooVetGit/Roo-Code ou juntar-se a reddit.com/r/RooCode ou discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 16adaea3f4..9a95a578d3 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "Uzantı {{serviceName}} üzerinde bulunan mevcut modellerin en güncel listesini otomatik olarak alır. Hangi modeli seçeceğinizden emin değilseniz, Roo Code {{defaultModelId}} ile en iyi şekilde çalışır. Şu anda mevcut olan ücretsiz seçenekleri bulmak için \"free\" araması da yapabilirsiniz." + "automaticFetch": "Uzantı {{serviceName}} üzerinde bulunan mevcut modellerin en güncel listesini otomatik olarak alır. Hangi modeli seçeceğinizden emin değilseniz, Roo Code {{defaultModelId}} ile en iyi şekilde çalışır. Şu anda mevcut olan ücretsiz seçenekleri bulmak için \"free\" araması da yapabilirsiniz.", + "label": "Model", + "searchPlaceholder": "Ara", + "noMatchFound": "Eşleşme bulunamadı", + "useCustomModel": "Özel kullan: {{modelId}}" }, "footer": { "feedback": "Herhangi bir sorunuz veya geri bildiriminiz varsa, github.com/RooVetGit/Roo-Code adresinde bir konu açmaktan veya reddit.com/r/RooCode ya da discord.gg/roocode'a katılmaktan çekinmeyin", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index b2c447ddf8..ac05321834 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "Tiện ích mở rộng tự động lấy danh sách mới nhất các mô hình có sẵn trên {{serviceName}}. Nếu bạn không chắc chắn nên chọn mô hình nào, Roo Code hoạt động tốt nhất với {{defaultModelId}}. Bạn cũng có thể thử tìm kiếm \"free\" cho các tùy chọn miễn phí hiện có." + "automaticFetch": "Tiện ích mở rộng tự động lấy danh sách mới nhất các mô hình có sẵn trên {{serviceName}}. Nếu bạn không chắc chắn nên chọn mô hình nào, Roo Code hoạt động tốt nhất với {{defaultModelId}}. Bạn cũng có thể thử tìm kiếm \"free\" cho các tùy chọn miễn phí hiện có.", + "label": "Mô hình", + "searchPlaceholder": "Tìm kiếm", + "noMatchFound": "Không tìm thấy kết quả", + "useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}" }, "footer": { "feedback": "Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng mở một vấn đề tại github.com/RooVetGit/Roo-Code hoặc tham gia reddit.com/r/RooCode hoặc discord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 557415f410..6c590a053d 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "扩展程序会自动获取 {{serviceName}} 上可用的最新模型列表。如果您不确定选择哪个模型,Roo Code 与 {{defaultModelId}} 配合最佳。您还可以搜索\"free\"以查找当前可用的免费选项。" + "automaticFetch": "扩展程序会自动获取 {{serviceName}} 上可用的最新模型列表。如果您不确定选择哪个模型,Roo Code 与 {{defaultModelId}} 配合最佳。您还可以搜索\"free\"以查找当前可用的免费选项。", + "label": "模型", + "searchPlaceholder": "搜索", + "noMatchFound": "未找到匹配项", + "useCustomModel": "使用自定义:{{modelId}}" }, "footer": { "feedback": "如果您有任何问题或反馈,请随时在 github.com/RooVetGit/Roo-Code 上提出问题或加入 reddit.com/r/RooCodediscord.gg/roocode", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index f3dfcaa661..534cdd81e4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -353,7 +353,11 @@ } }, "modelPicker": { - "automaticFetch": "擴充功能會自動獲取 {{serviceName}} 上可用的最新模型列表。如果您不確定選擇哪個模型,Roo Code 與 {{defaultModelId}} 配合最佳。您還可以搜尋\"free\"以尋找目前可用的免費選項。" + "automaticFetch": "擴充功能會自動獲取 {{serviceName}} 上可用的最新模型列表。如果您不確定選擇哪個模型,Roo Code 與 {{defaultModelId}} 配合最佳。您還可以搜尋\"free\"以尋找目前可用的免費選項。", + "label": "模型", + "searchPlaceholder": "搜尋", + "noMatchFound": "未找到相符項目", + "useCustomModel": "使用自訂: {{modelId}}" }, "footer": { "feedback": "如果您有任何問題或反饋,請隨時在 github.com/RooVetGit/Roo-Code 上提出問題或加入 reddit.com/r/RooCodediscord.gg/roocode",