Compare commits

...
8 Commits
Author SHA1 Message Date
Tim Baekandjoaoback a7271532f8 0.6.43 (#20093)
* refac

* fix: python pip install dep issue

* Merge pull request #20085 from joaoback/patch-19

Update translation.json (pt-BR)

* fix/refac: stt default content type

* fix/refac: temp chat image handling

* fix/refac: image action button

* chore: bump

---------

Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com>
2025-12-22 01:03:34 -05:00
Timothy Jaeryang Baek 5088583721 chore: bump 2025-12-22 10:02:57 +04:00
Timothy Jaeryang Baek 0a78323406 fix/refac: image action button 2025-12-22 09:56:44 +04:00
Timothy Jaeryang Baek 423983f5a7 fix/refac: temp chat image handling 2025-12-22 09:48:53 +04:00
Timothy Jaeryang Baek 4ab917c74b fix/refac: stt default content type 2025-12-22 09:45:55 +04:00
joaoback 7f0ca8c4b7 Merge pull request #20085 from joaoback/patch-19
Update translation.json (pt-BR)
2025-12-22 00:43:25 -05:00
Timothy Jaeryang Baek 5c5f87a63c fix: python pip install dep issue 2025-12-22 09:42:50 +04:00
Timothy Jaeryang Baek def8a0027d refac 2025-12-22 09:41:12 +04:00
11 changed files with 67 additions and 36 deletions
+9
View File
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.6.43] - 2025-12-22
### Fixed
- 🐍 **Python dependency installation issues** were resolved by correcting pip dependency handling, preventing installation failures in certain environments and improving setup reliability. [Commit](https://github.com/open-webui/open-webui/commit/5c5f87a)
- 🎙️ **Speech-to-Text default content type handling** was fixed and refactored to ensure correct MIME type usage, improving compatibility across STT providers and preventing transcription errors caused by incorrect defaults. [Commit](https://github.com/open-webui/open-webui/commit/4ab917c)
- 🖼️ **Temporary chat image handling** was fixed and refactored, ensuring images generated or edited in temporary chats are correctly processed, stored, and displayed without inconsistencies or missing references. [Commit](https://github.com/open-webui/open-webui/commit/423983f)
- 🎨 **Image action button fixed**, restoring the ability to trigger image generation, editing, and related image actions from the chat UI. [Commit](https://github.com/open-webui/open-webui/commit/def8a00)
## [0.6.42] - 2025-12-21 ## [0.6.42] - 2025-12-21
### Added ### Added
+1
View File
@@ -85,6 +85,7 @@ if "cuda_error" in locals():
log.exception(cuda_error) log.exception(cuda_error)
del cuda_error del cuda_error
SRC_LOG_LEVELS = {} # Legacy variable, do not remove
WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI") WEBUI_NAME = os.environ.get("WEBUI_NAME", "Open WebUI")
if WEBUI_NAME != "Open WebUI": if WEBUI_NAME != "Open WebUI":
+1 -2
View File
@@ -1151,10 +1151,9 @@ def transcription(
user=Depends(get_verified_user), user=Depends(get_verified_user),
): ):
log.info(f"file.content_type: {file.content_type}") log.info(f"file.content_type: {file.content_type}")
stt_supported_content_types = getattr( stt_supported_content_types = getattr(
request.app.state.config, "STT_SUPPORTED_CONTENT_TYPES", [] request.app.state.config, "STT_SUPPORTED_CONTENT_TYPES", []
) or ["audio/*", "video/webm"] )
if not strict_match_mime_type(stt_supported_content_types, file.content_type): if not strict_match_mime_type(stt_supported_content_types, file.content_type):
raise HTTPException( raise HTTPException(
+1 -1
View File
@@ -114,7 +114,7 @@ def process_uploaded_file(request, file, file_path, file_item, file_metadata, us
if file.content_type: if file.content_type:
stt_supported_content_types = getattr( stt_supported_content_types = getattr(
request.app.state.config, "STT_SUPPORTED_CONTENT_TYPES", [] request.app.state.config, "STT_SUPPORTED_CONTENT_TYPES", []
) or ["audio/*", "video/webm"] )
if strict_match_mime_type(stt_supported_content_types, file.content_type): if strict_match_mime_type(stt_supported_content_types, file.content_type):
file_path = Storage.get_file(file_path) file_path = Storage.get_file(file_path)
+7 -1
View File
@@ -531,11 +531,17 @@ def upload_image(request, image_data, content_type, metadata, user):
@router.post("/generations") @router.post("/generations")
async def generate_images(
request: Request, form_data: CreateImageForm, user=Depends(get_verified_user)
):
return await image_generations(request, form_data, user=user)
async def image_generations( async def image_generations(
request: Request, request: Request,
form_data: CreateImageForm, form_data: CreateImageForm,
metadata: Optional[dict] = None, metadata: Optional[dict] = None,
user=Depends(get_verified_user), user=None,
): ):
# if IMAGE_SIZE = 'auto', default WidthxHeight to the 512x512 default # if IMAGE_SIZE = 'auto', default WidthxHeight to the 512x512 default
# This is only relevant when the user has set IMAGE_SIZE to 'auto' with an # This is only relevant when the user has set IMAGE_SIZE to 'auto' with an
+4
View File
@@ -622,6 +622,10 @@ def strict_match_mime_type(supported: list[str] | str, header: str) -> Optional[
supported = [s for s in supported if s.strip() and "/" in s] supported = [s for s in supported if s.strip() and "/" in s]
if len(supported) == 0:
# Default to common types if none are specified
supported = ["audio/*", "video/webm"]
match = mimeparse.best_match(supported, header) match = mimeparse.best_match(supported, header)
if not match: if not match:
return None return None
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.6.42", "version": "0.6.43",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "open-webui", "name": "open-webui",
"version": "0.6.42", "version": "0.6.43",
"dependencies": { "dependencies": {
"@azure/msal-browser": "^4.5.0", "@azure/msal-browser": "^4.5.0",
"@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-javascript": "^6.2.2",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.6.42", "version": "0.6.43",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "npm run pyodide:fetch && vite dev --host", "dev": "npm run pyodide:fetch && vite dev --host",
+4 -2
View File
@@ -52,8 +52,10 @@ dependencies = [
"google-genai==1.56.0", "google-genai==1.56.0",
"google-generativeai==0.8.6", "google-generativeai==0.8.6",
"langchain==0.3.27", "langchain==1.2.0",
"langchain-community==0.3.29", "langchain-community==0.4.1",
"langchain-classic==1.0.0",
"langchain-text-splitters==1.1.0",
"fake-useragent==2.2.0", "fake-useragent==2.2.0",
"chromadb==1.3.7", "chromadb==1.3.7",
+13 -3
View File
@@ -731,10 +731,20 @@
imageUrl = await compressImageHandler(imageUrl, $settings, $config); imageUrl = await compressImageHandler(imageUrl, $settings, $config);
} }
const blob = await (await fetch(imageUrl)).blob(); if ($temporaryChatEnabled) {
const compressedFile = new File([blob], file.name, { type: file.type }); files = [
...files,
{
type: 'image',
url: imageUrl
}
];
} else {
const blob = await (await fetch(imageUrl)).blob();
const compressedFile = new File([blob], file.name, { type: file.type });
uploadFileHandler(compressedFile, false); uploadFileHandler(compressedFile, false);
}
}; };
reader.readAsDataURL(file['type'] === 'image/heic' ? await convertHeicToJpeg(file) : file); reader.readAsDataURL(file['type'] === 'image/heic' ? await convertHeicToJpeg(file) : file);
+24 -24
View File
@@ -12,10 +12,10 @@
"{{COUNT}} Available Tools": "{{COUNT}} Ferramentas disponíveis", "{{COUNT}} Available Tools": "{{COUNT}} Ferramentas disponíveis",
"{{COUNT}} characters": "{{COUNT}} caracteres", "{{COUNT}} characters": "{{COUNT}} caracteres",
"{{COUNT}} extracted lines": "{{COUNT}} linhas extraídas", "{{COUNT}} extracted lines": "{{COUNT}} linhas extraídas",
"{{COUNT}} files": "", "{{COUNT}} files": "{COUNT}} arquivos",
"{{COUNT}} hidden lines": "{{COUNT}} linhas ocultas", "{{COUNT}} hidden lines": "{{COUNT}} linhas ocultas",
"{{COUNT}} Replies": "{{COUNT}} Respostas", "{{COUNT}} Replies": "{{COUNT}} Respostas",
"{{COUNT}} Rows": "", "{{COUNT}} Rows": "{{COUNT}} Linhas",
"{{COUNT}} Sources": "{{COUNT}} Origens", "{{COUNT}} Sources": "{{COUNT}} Origens",
"{{COUNT}} words": "{{COUNT}} palavras", "{{COUNT}} words": "{{COUNT}} palavras",
"{{LOCALIZED_DATE}} at {{LOCALIZED_TIME}}": "{{LOCALIZED_DATE}} às {{LOCALIZED_TIME}}", "{{LOCALIZED_DATE}} at {{LOCALIZED_TIME}}": "{{LOCALIZED_DATE}} às {{LOCALIZED_TIME}}",
@@ -69,7 +69,7 @@
"Add text content": "Adicionar conteúdo de texto", "Add text content": "Adicionar conteúdo de texto",
"Add User": "Adicionar Usuário", "Add User": "Adicionar Usuário",
"Add User Group": "Adicionar grupo de usuários", "Add User Group": "Adicionar grupo de usuários",
"Add webpage": "", "Add webpage": "Adicionar página web",
"Additional Config": "Configuração adicional", "Additional Config": "Configuração adicional",
"Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Opções de configuração adicionais para o marcador. Deve ser uma string JSON com pares chave-valor. Por exemplo, '{\"key\": \"value\"}'. As chaves suportadas incluem: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level", "Additional configuration options for marker. This should be a JSON string with key-value pairs. For example, '{\"key\": \"value\"}'. Supported keys include: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level": "Opções de configuração adicionais para o marcador. Deve ser uma string JSON com pares chave-valor. Por exemplo, '{\"key\": \"value\"}'. As chaves suportadas incluem: disable_links, keep_pageheader_in_output, keep_pagefooter_in_output, filter_blank_pages, drop_repeated_text, layout_coverage_threshold, merge_threshold, height_tolerance, gap_threshold, image_threshold, min_line_length, level_count, default_level",
"Additional Parameters": "Parâmetros adicionais", "Additional Parameters": "Parâmetros adicionais",
@@ -138,7 +138,7 @@
"API keys": "Chaves API", "API keys": "Chaves API",
"API Keys": "Chaves API", "API Keys": "Chaves API",
"API Mode": "Modo API", "API Mode": "Modo API",
"API Timeout": "", "API Timeout": "Tempo limite da API",
"API Version": "Versão da API", "API Version": "Versão da API",
"API Version is required": "Versão da API é obrigatória", "API Version is required": "Versão da API é obrigatória",
"Application DN": "DN da Aplicação", "Application DN": "DN da Aplicação",
@@ -223,7 +223,7 @@
"Call feature is not supported when using Web STT engine": "O recurso de chamada não é suportado ao usar o mecanismo Web STT", "Call feature is not supported when using Web STT engine": "O recurso de chamada não é suportado ao usar o mecanismo Web STT",
"Camera": "Câmera", "Camera": "Câmera",
"Cancel": "Cancelar", "Cancel": "Cancelar",
"Cannot create an empty note.": "", "Cannot create an empty note.": "Não é possível criar uma nota vazia.",
"Capabilities": "Capacidades", "Capabilities": "Capacidades",
"Capture": "Capturar", "Capture": "Capturar",
"Capture Audio": "Capturar Audio", "Capture Audio": "Capturar Audio",
@@ -233,7 +233,7 @@
"Channel deleted successfully": "Canal apagado com sucesso", "Channel deleted successfully": "Canal apagado com sucesso",
"Channel Name": "Nome do canal", "Channel Name": "Nome do canal",
"Channel name cannot be empty.": "O nome do canal não pode estar vazio.", "Channel name cannot be empty.": "O nome do canal não pode estar vazio.",
"Channel name must be less than 128 characters": "", "Channel name must be less than 128 characters": "O nome do canal deve ter menos de 128 caracteres.",
"Channel Type": "Tipo de canal", "Channel Type": "Tipo de canal",
"Channel updated successfully": "Canal atualizado com sucesso", "Channel updated successfully": "Canal atualizado com sucesso",
"Channels": "Canais", "Channels": "Canais",
@@ -303,7 +303,7 @@
"Collaboration channel where people join as members": "Canal de colaboração onde as pessoas se juntam como membros.", "Collaboration channel where people join as members": "Canal de colaboração onde as pessoas se juntam como membros.",
"Collapse": "Recolher", "Collapse": "Recolher",
"Collection": "Coleção", "Collection": "Coleção",
"Collections": "", "Collections": "Coleções",
"Color": "Cor", "Color": "Cor",
"ComfyUI": "ComfyUI", "ComfyUI": "ComfyUI",
"ComfyUI API Key": "Chave de API do ComfyUI", "ComfyUI API Key": "Chave de API do ComfyUI",
@@ -372,7 +372,7 @@
"Create Model": "Criar modelo", "Create Model": "Criar modelo",
"Create new key": "Criar nova chave", "Create new key": "Criar nova chave",
"Create new secret key": "Criar nova chave secreta", "Create new secret key": "Criar nova chave secreta",
"Create note": "", "Create note": "Criar nota",
"Create Note": "Criar Nota", "Create Note": "Criar Nota",
"Create your first note by clicking on the plus button below.": "Crie sua primeira nota clicando no botão de adição abaixo.", "Create your first note by clicking on the plus button below.": "Crie sua primeira nota clicando no botão de adição abaixo.",
"Created at": "Criado em", "Created at": "Criado em",
@@ -630,7 +630,7 @@
"Enter SearchApi API Key": "Digite a Chave API do SearchApi", "Enter SearchApi API Key": "Digite a Chave API do SearchApi",
"Enter SearchApi Engine": "Digite o Motor do SearchApi", "Enter SearchApi Engine": "Digite o Motor do SearchApi",
"Enter Searxng Query URL": "Digite a URL de Consulta do Searxng", "Enter Searxng Query URL": "Digite a URL de Consulta do Searxng",
"Enter Searxng search language": "", "Enter Searxng search language": "Digite o idioma de pesquisa do Searxng",
"Enter Seed": "Digite a Seed", "Enter Seed": "Digite a Seed",
"Enter SerpApi API Key": "Insira a chave da API SerpApi", "Enter SerpApi API Key": "Insira a chave da API SerpApi",
"Enter SerpApi Engine": "Digite o mecanismo/engine SerpApi", "Enter SerpApi Engine": "Digite o mecanismo/engine SerpApi",
@@ -738,7 +738,7 @@
"Failed to load chat preview": "Falha ao carregar a pré-visualização do chat", "Failed to load chat preview": "Falha ao carregar a pré-visualização do chat",
"Failed to load file content.": "Falha ao carregar o conteúdo do arquivo.", "Failed to load file content.": "Falha ao carregar o conteúdo do arquivo.",
"Failed to move chat": "Falha ao mover o chat", "Failed to move chat": "Falha ao mover o chat",
"Failed to process URL: {{url}}": "", "Failed to process URL: {{url}}": "Falha ao processar URL: {{url}}",
"Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência", "Failed to read clipboard contents": "Falha ao ler o conteúdo da área de transferência",
"Failed to remove member": "Falha ao remover membro", "Failed to remove member": "Falha ao remover membro",
"Failed to render diagram": "Falha ao renderizar o diagrama", "Failed to render diagram": "Falha ao renderizar o diagrama",
@@ -840,7 +840,7 @@
"Google PSE API Key": "Chave API do Google PSE", "Google PSE API Key": "Chave API do Google PSE",
"Google PSE Engine Id": "ID do Motor do Google PSE", "Google PSE Engine Id": "ID do Motor do Google PSE",
"Gravatar": "", "Gravatar": "",
"Grid": "", "Grid": "Grade",
"Group": "Grupo", "Group": "Grupo",
"Group Channel": "Canal do grupo", "Group Channel": "Canal do grupo",
"Group created successfully": "Grupo criado com sucesso", "Group created successfully": "Grupo criado com sucesso",
@@ -998,8 +998,8 @@
"License": "Licença", "License": "Licença",
"Lift List": "", "Lift List": "",
"Light": "Claro", "Light": "Claro",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "", "Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Limitar consultas de pesquisa simultâneas. 0 = ilimitado (padrão). Defina como 1 para execução sequencial (recomendado para APIs com limites de taxa rígidos, como o nível gratuito do Brave).",
"List": "", "List": "Lista",
"Listening...": "Escutando...", "Listening...": "Escutando...",
"Llama.cpp": "", "Llama.cpp": "",
"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.", "LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
@@ -1105,14 +1105,14 @@
"Name and ID are required, please fill them out": "Nome e documento de identidade são obrigatórios, por favor preencha-os", "Name and ID are required, please fill them out": "Nome e documento de identidade são obrigatórios, por favor preencha-os",
"Name your knowledge base": "Nome da sua base de conhecimento", "Name your knowledge base": "Nome da sua base de conhecimento",
"Native": "Nativo", "Native": "Nativo",
"New": "", "New": "Novo",
"New Button": "Novo Botão", "New Button": "Novo Botão",
"New Chat": "Novo Chat", "New Chat": "Novo Chat",
"New Folder": "Nova Pasta", "New Folder": "Nova Pasta",
"New Function": "Nova Função", "New Function": "Nova Função",
"New Knowledge": "Novo Conhecimento", "New Knowledge": "Novo Conhecimento",
"New Model": "Novo Modelo", "New Model": "Novo Modelo",
"New Note": "", "New Note": "Nova nota",
"New Password": "Nova Senha", "New Password": "Nova Senha",
"New Prompt": "Novo Prompt", "New Prompt": "Novo Prompt",
"New Temporary Chat": "Novo chat temporário", "New Temporary Chat": "Novo chat temporário",
@@ -1131,12 +1131,12 @@
"No expiration can pose security risks.": "Nenhuma expiração pode representar riscos de segurança.", "No expiration can pose security risks.": "Nenhuma expiração pode representar riscos de segurança.",
"No feedbacks found": "Comentários não encontrados", "No feedbacks found": "Comentários não encontrados",
"No file selected": "Nenhum arquivo selecionado", "No file selected": "Nenhum arquivo selecionado",
"No files in this knowledge base.": "", "No files in this knowledge base.": "Não existem arquivos nesta base de conhecimento.",
"No functions found": "Nenhuma função encontrada", "No functions found": "Nenhuma função encontrada",
"No groups with access, add a group to grant access": "Nenhum grupo com acesso, adicione um grupo para dar acesso", "No groups with access, add a group to grant access": "Nenhum grupo com acesso, adicione um grupo para dar acesso",
"No HTML, CSS, or JavaScript content found.": "Nenhum conteúdo HTML, CSS ou JavaScript encontrado.", "No HTML, CSS, or JavaScript content found.": "Nenhum conteúdo HTML, CSS ou JavaScript encontrado.",
"No inference engine with management support found": "Nenhum mecanismo de inferência com suporte de gerenciamento encontrado", "No inference engine with management support found": "Nenhum mecanismo de inferência com suporte de gerenciamento encontrado",
"No knowledge bases found.": "", "No knowledge bases found.": "Nenhuma base de conhecimento encontrada.",
"No knowledge found": "Nenhum conhecimento encontrado", "No knowledge found": "Nenhum conhecimento encontrado",
"No memories to clear": "Nenhuma memória para limpar", "No memories to clear": "Nenhuma memória para limpar",
"No model IDs": "Nenhum ID de modelo", "No model IDs": "Nenhum ID de modelo",
@@ -1323,8 +1323,8 @@
"Read": "Ler", "Read": "Ler",
"Read Aloud": "Ler em Voz Alta", "Read Aloud": "Ler em Voz Alta",
"Read more →": "Leia mais →", "Read more →": "Leia mais →",
"Read Only": "", "Read Only": "Somente leitura",
"Read-Only Access": "", "Read-Only Access": "Acesso somente leitura",
"Reason": "Razão", "Reason": "Razão",
"Reasoning Effort": "Esforço de raciocínio", "Reasoning Effort": "Esforço de raciocínio",
"Reasoning Tags": "Tags de raciocínio", "Reasoning Tags": "Tags de raciocínio",
@@ -1434,7 +1434,7 @@
"Searching Knowledge for \"{{searchQuery}}\"": "Buscando conhecimento para \"{{searchQuery}}\"", "Searching Knowledge for \"{{searchQuery}}\"": "Buscando conhecimento para \"{{searchQuery}}\"",
"Searching the web": "Pesquisando na Internet...", "Searching the web": "Pesquisando na Internet...",
"Searxng Query URL": "URL da Consulta Searxng", "Searxng Query URL": "URL da Consulta Searxng",
"Searxng search language (all, en, es, de, fr, etc.)": "", "Searxng search language (all, en, es, de, fr, etc.)": "Idioma de pesquisa de pesquisa (all, en, es, de, fr, etc.)",
"See readme.md for instructions": "Veja readme.md para instruções", "See readme.md for instructions": "Veja readme.md para instruções",
"See what's new": "Veja o que há de novo", "See what's new": "Veja o que há de novo",
"Seed": "Seed", "Seed": "Seed",
@@ -1509,7 +1509,7 @@
"Show": "Mostrar", "Show": "Mostrar",
"Show \"What's New\" modal on login": "Mostrar \"O que há de Novo\" no login", "Show \"What's New\" modal on login": "Mostrar \"O que há de Novo\" no login",
"Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendentes", "Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na Sobreposição de Conta Pendentes",
"Show Files": "", "Show Files": "Mostrar arquivos",
"Show Formatting Toolbar": "Mostrar barra de ferramentas de formatação", "Show Formatting Toolbar": "Mostrar barra de ferramentas de formatação",
"Show image preview": "Mostrar pré-visualização da imagem", "Show image preview": "Mostrar pré-visualização da imagem",
"Show Model": "Mostrar modelo", "Show Model": "Mostrar modelo",
@@ -1534,7 +1534,7 @@
"Sonar Pro": "", "Sonar Pro": "",
"Sonar Reasoning": "", "Sonar Reasoning": "",
"Sonar Reasoning Pro": "", "Sonar Reasoning Pro": "",
"Sort": "", "Sort": "Organizar",
"Sougou Search API sID": "", "Sougou Search API sID": "",
"Sougou Search API SK": "", "Sougou Search API SK": "",
"Source": "Fonte", "Source": "Fonte",
@@ -1789,7 +1789,7 @@
"Web Search in Chat": "Pesquisa na Web no Chat", "Web Search in Chat": "Pesquisa na Web no Chat",
"Web Search Query Generation": "Geração de consulta de pesquisa na Web", "Web Search Query Generation": "Geração de consulta de pesquisa na Web",
"Webhook URL": "URL do Webhook", "Webhook URL": "URL do Webhook",
"Webpage URLs": "", "Webpage URLs": "URLs de páginas da web",
"WebUI Settings": "Configurações da WebUI", "WebUI Settings": "Configurações da WebUI",
"WebUI URL": "", "WebUI URL": "",
"WebUI will make requests to \"{{url}}\"": "A WebUI fará requisições para \"{{url}}\"", "WebUI will make requests to \"{{url}}\"": "A WebUI fará requisições para \"{{url}}\"",
@@ -1826,7 +1826,7 @@
"You cannot upload an empty file.": "Você não pode carregar um arquivo vazio.", "You cannot upload an empty file.": "Você não pode carregar um arquivo vazio.",
"You do not have permission to send messages in this channel.": "Você não tem permissão para enviar mensagens neste canal.", "You do not have permission to send messages in this channel.": "Você não tem permissão para enviar mensagens neste canal.",
"You do not have permission to send messages in this thread.": "Você não tem permissão para enviar mensagens neste tópico.", "You do not have permission to send messages in this thread.": "Você não tem permissão para enviar mensagens neste tópico.",
"You do not have permission to upload files to this knowledge base.": "", "You do not have permission to upload files to this knowledge base.": "Você não tem permissão para enviar arquivos para esta base de conhecimento.",
"You do not have permission to upload files.": "Você não tem permissão para fazer upload de arquivos.", "You do not have permission to upload files.": "Você não tem permissão para fazer upload de arquivos.",
"You have no archived conversations.": "Você não tem conversas arquivadas.", "You have no archived conversations.": "Você não tem conversas arquivadas.",
"You have shared this chat": "Você compartilhou este chat", "You have shared this chat": "Você compartilhou este chat",