This commit is contained in:
Cyp 2025-09-19 08:59:21 +09:00
commit 10c9a7d75e
13 changed files with 66 additions and 31 deletions

View file

@ -2,6 +2,7 @@ fastapi==0.115.7
uvicorn[standard]==0.35.0 uvicorn[standard]==0.35.0
pydantic==2.11.7 pydantic==2.11.7
python-multipart==0.0.20 python-multipart==0.0.20
itsdangerous==2.2.0
python-socketio==5.13.0 python-socketio==5.13.0
python-jose==3.4.0 python-jose==3.4.0

View file

@ -10,6 +10,7 @@ dependencies = [
"uvicorn[standard]==0.35.0", "uvicorn[standard]==0.35.0",
"pydantic==2.11.7", "pydantic==2.11.7",
"python-multipart==0.0.20", "python-multipart==0.0.20",
"itsdangerous==2.2.0",
"python-socketio==5.13.0", "python-socketio==5.13.0",
"python-jose==3.4.0", "python-jose==3.4.0",

View file

@ -19,10 +19,13 @@
let changelog = null; let changelog = null;
onMount(async () => { const init = async () => {
const res = await getChangelog(); changelog = await getChangelog();
changelog = res; };
});
$: if (show) {
init();
}
</script> </script>
<Modal bind:show size="xl"> <Modal bind:show size="xl">

View file

@ -1143,7 +1143,7 @@
<div class=" mb-2.5 py-0.5 w-full justify-between"> <div class=" mb-2.5 py-0.5 w-full justify-between">
<Tooltip <Tooltip
content={$i18n.t( content={$i18n.t(
'The Weight of BM25 Hybrid Search. 0 more lexical, 1 more semantic. Default 0.5' 'The Weight of BM25 Hybrid Search. 0 more semantic, 1 more lexical. Default 0.5'
)} )}
placement="top-start" placement="top-start"
className="inline-tooltip" className="inline-tooltip"

View file

@ -43,6 +43,10 @@
let searchDebounceTimeout; let searchDebounceTimeout;
const searchHandler = async () => { const searchHandler = async () => {
if (!show) {
return;
}
if (searchDebounceTimeout) { if (searchDebounceTimeout) {
clearTimeout(searchDebounceTimeout); clearTimeout(searchDebounceTimeout);
} }

View file

@ -286,9 +286,11 @@
} }
}; };
onMount(async () => { const setOllamaVersion = async () => {
ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false); ollamaVersion = await getOllamaVersion(localStorage.token).catch((error) => false);
};
onMount(async () => {
if (items) { if (items) {
tags = items tags = items
.filter((item) => !(item.model?.info?.meta?.hidden ?? false)) .filter((item) => !(item.model?.info?.meta?.hidden ?? false))
@ -300,6 +302,10 @@
} }
}); });
$: if (show) {
setOllamaVersion();
}
const cancelModelPullHandler = async (model: string) => { const cancelModelPullHandler = async (model: string) => {
const { reader, abortController } = $MODEL_DOWNLOAD_POOL[model]; const { reader, abortController } = $MODEL_DOWNLOAD_POOL[model];
if (abortController) { if (abortController) {

View file

@ -39,6 +39,10 @@
} }
const searchHandler = async () => { const searchHandler = async () => {
if (!show) {
return;
}
if (searchDebounceTimeout) { if (searchDebounceTimeout) {
clearTimeout(searchDebounceTimeout); clearTimeout(searchDebounceTimeout);
} }

View file

@ -91,6 +91,10 @@
}; };
const searchHandler = async () => { const searchHandler = async () => {
if (!show) {
return;
}
if (searchDebounceTimeout) { if (searchDebounceTimeout) {
clearTimeout(searchDebounceTimeout); clearTimeout(searchDebounceTimeout);
} }

View file

@ -44,8 +44,12 @@
accessControl = channel.access_control; accessControl = channel.access_control;
}; };
$: if (channel) { $: if (show) {
init(); if (channel) {
init();
}
} else {
resetHandler();
} }
let showDeleteConfirmDialog = false; let showDeleteConfirmDialog = false;
@ -68,6 +72,12 @@
show = false; show = false;
}; };
const resetHandler = () => {
name = '';
accessControl = {};
loading = false;
};
</script> </script>
<Modal size="sm" bind:show> <Modal size="sm" bind:show>

View file

@ -332,14 +332,16 @@
let isExpandedUpdateTimeout; let isExpandedUpdateTimeout;
const isExpandedUpdateDebounceHandler = (open) => { const isExpandedUpdateDebounceHandler = () => {
clearTimeout(isExpandedUpdateTimeout); clearTimeout(isExpandedUpdateTimeout);
isExpandedUpdateTimeout = setTimeout(() => { isExpandedUpdateTimeout = setTimeout(() => {
isExpandedUpdateHandler(); isExpandedUpdateHandler();
}, 500); }, 500);
}; };
$: isExpandedUpdateDebounceHandler(open); $: if (open) {
isExpandedUpdateDebounceHandler();
}
const renameHandler = async () => { const renameHandler = async () => {
console.log('Edit'); console.log('Edit');

View file

@ -212,7 +212,7 @@
"Capture Audio": "Capturar Audio", "Capture Audio": "Capturar Audio",
"Certificate Path": "Caminho do Certificado", "Certificate Path": "Caminho do Certificado",
"Change Password": "Alterar Senha", "Change Password": "Alterar Senha",
"Channel": "", "Channel": "Canal",
"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 updated successfully": "Canal atualizado com sucesso", "Channel updated successfully": "Canal atualizado com sucesso",
@ -358,7 +358,7 @@
"Custom Parameter Value": "Valor do parâmetro personalizado", "Custom Parameter Value": "Valor do parâmetro personalizado",
"Danger Zone": "Zona de perigo", "Danger Zone": "Zona de perigo",
"Dark": "Escuro", "Dark": "Escuro",
"Data Controls": "", "Data Controls": "Controle de Dados",
"Database": "Banco de Dados", "Database": "Banco de Dados",
"Datalab Marker API": "API do Marcador do Datalab", "Datalab Marker API": "API do Marcador do Datalab",
"Datalab Marker API Key required.": "Chave de API do Datalab Marker necessária.", "Datalab Marker API Key required.": "Chave de API do Datalab Marker necessária.",
@ -370,8 +370,8 @@
"Default (SentenceTransformers)": "Padrão (SentenceTransformers)", "Default (SentenceTransformers)": "Padrão (SentenceTransformers)",
"Default action buttons will be used.": "Botões de ação padrão serão usados.", "Default action buttons will be used.": "Botões de ação padrão serão usados.",
"Default description enabled": "Descrição padrão habilitada", "Default description enabled": "Descrição padrão habilitada",
"Default Features": "", "Default Features": "Recursos padrão",
"Default Filters": "", "Default Filters": "Filtros padrão",
"Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "O modo padrão funciona com uma gama mais ampla de modelos, chamando as ferramentas uma vez antes da execução. O modo nativo aproveita os recursos integrados de chamada de ferramentas do modelo, mas exige que o modelo suporte esse recurso inerentemente.", "Default mode works with a wider range of models by calling tools once before execution. Native mode leverages the model's built-in tool-calling capabilities, but requires the model to inherently support this feature.": "O modo padrão funciona com uma gama mais ampla de modelos, chamando as ferramentas uma vez antes da execução. O modo nativo aproveita os recursos integrados de chamada de ferramentas do modelo, mas exige que o modelo suporte esse recurso inerentemente.",
"Default Model": "Modelo Padrão", "Default Model": "Modelo Padrão",
"Default model updated": "Modelo padrão atualizado", "Default model updated": "Modelo padrão atualizado",
@ -487,7 +487,7 @@
"Edit Memory": "Editar Memória", "Edit Memory": "Editar Memória",
"Edit User": "Editar Usuário", "Edit User": "Editar Usuário",
"Edit User Group": "Editar Grupo de Usuários", "Edit User Group": "Editar Grupo de Usuários",
"edited": "", "edited": "editado",
"Edited": "Editado", "Edited": "Editado",
"Editing": "Editando", "Editing": "Editando",
"Eject": "Ejetar", "Eject": "Ejetar",
@ -630,7 +630,7 @@
"Enter Your Role": "Digite Sua Função", "Enter Your Role": "Digite Sua Função",
"Enter Your Username": "Digite seu usuário", "Enter Your Username": "Digite seu usuário",
"Enter your webhook URL": "Insira a URL do seu webhook", "Enter your webhook URL": "Insira a URL do seu webhook",
"Entra ID": "", "Entra ID": "ID Entra",
"Error": "Erro", "Error": "Erro",
"ERROR": "ERRO", "ERROR": "ERRO",
"Error accessing directory": "Erro ao acessar o diretório", "Error accessing directory": "Erro ao acessar o diretório",
@ -726,13 +726,13 @@
"Firecrawl API Key": "Chave de API do Firecrawl", "Firecrawl API Key": "Chave de API do Firecrawl",
"Floating Quick Actions": "Ações rápidas flutuantes", "Floating Quick Actions": "Ações rápidas flutuantes",
"Focus chat input": "Focar entrada de chat", "Focus chat input": "Focar entrada de chat",
"Folder Background Image": "", "Folder Background Image": "Imagem de fundo da pasta",
"Folder deleted successfully": "Pasta excluída com sucesso", "Folder deleted successfully": "Pasta excluída com sucesso",
"Folder Name": "Nome da Pasta", "Folder Name": "Nome da Pasta",
"Folder name cannot be empty.": "Nome da pasta não pode estar vazio.", "Folder name cannot be empty.": "Nome da pasta não pode estar vazio.",
"Folder name updated successfully": "Nome da pasta atualizado com sucesso", "Folder name updated successfully": "Nome da pasta atualizado com sucesso",
"Folder updated successfully": "Pasta atualizada com sucesso", "Folder updated successfully": "Pasta atualizada com sucesso",
"Folders": "", "Folders": "Pastas",
"Follow up": "Acompanhamento", "Follow up": "Acompanhamento",
"Follow Up Generation": "Geração de Acompanhamento", "Follow Up Generation": "Geração de Acompanhamento",
"Follow Up Generation Prompt": "Prompt para Geração dos Acompanhamentos", "Follow Up Generation Prompt": "Prompt para Geração dos Acompanhamentos",
@ -744,7 +744,7 @@
"Form": "Formulário", "Form": "Formulário",
"Format Lines": "Formatar linhas", "Format Lines": "Formatar linhas",
"Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.": "Formata as linhas na saída. O padrão é Falso. Se definido como Verdadeiro, as linhas serão formatadas para detectar matemática e estilos embutidos.", "Format the lines in the output. Defaults to False. If set to True, the lines will be formatted to detect inline math and styles.": "Formata as linhas na saída. O padrão é Falso. Se definido como Verdadeiro, as linhas serão formatadas para detectar matemática e estilos embutidos.",
"Format your variables using brackets like this:": "Formate suas variáveis usando colchetes como este:", "Format your variables using brackets like this:": "Formate suas variáveis usando duplas chaves como este:",
"Formatting may be inconsistent from source.": "A formatação pode ser inconsistente em relação à fonte.", "Formatting may be inconsistent from source.": "A formatação pode ser inconsistente em relação à fonte.",
"Forwards system user OAuth access token to authenticate": "Encaminha o token de acesso OAuth do usuário do sistema para autenticação", "Forwards system user OAuth access token to authenticate": "Encaminha o token de acesso OAuth do usuário do sistema para autenticação",
"Forwards system user session credentials to authenticate": "Encaminha as credenciais da sessão do usuário do sistema para autenticação", "Forwards system user session credentials to authenticate": "Encaminha as credenciais da sessão do usuário do sistema para autenticação",
@ -1048,7 +1048,7 @@
"No models found": "Nenhum modelo encontrado", "No models found": "Nenhum modelo encontrado",
"No models selected": "Nenhum modelo selecionado", "No models selected": "Nenhum modelo selecionado",
"No Notes": "Sem Notas", "No Notes": "Sem Notas",
"No notes found": "", "No notes found": "Notas não encontradas",
"No results": "Nenhum resultado encontrado", "No results": "Nenhum resultado encontrado",
"No results found": "Nenhum resultado encontrado", "No results found": "Nenhum resultado encontrado",
"No search query generated": "Nenhuma consulta de pesquisa gerada", "No search query generated": "Nenhuma consulta de pesquisa gerada",
@ -1062,7 +1062,7 @@
"None": "Nenhum", "None": "Nenhum",
"Not factually correct": "Não está factualmente correto", "Not factually correct": "Não está factualmente correto",
"Not helpful": "Não é útil", "Not helpful": "Não é útil",
"Note": "", "Note": "Nota",
"Note deleted successfully": "Nota excluída com sucesso", "Note deleted successfully": "Nota excluída com sucesso",
"Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa retornará apenas documentos com pontuação igual ou superior à pontuação mínima.", "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "Nota: Se você definir uma pontuação mínima, a pesquisa retornará apenas documentos com pontuação igual ou superior à pontuação mínima.",
"Notes": "Notas", "Notes": "Notas",
@ -1095,10 +1095,10 @@
"Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Você está usando um método não suportado (somente frontend). Por favor, sirva a WebUI a partir do backend.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Você está usando um método não suportado (somente frontend). Por favor, sirva a WebUI a partir do backend.",
"Open file": "Abrir arquivo", "Open file": "Abrir arquivo",
"Open in full screen": "Abrir em tela cheia", "Open in full screen": "Abrir em tela cheia",
"Open link": "", "Open link": "Abrir link",
"Open modal to configure connection": "Abra o modal para configurar a conexão", "Open modal to configure connection": "Abra o modal para configurar a conexão",
"Open Modal To Manage Floating Quick Actions": "Abra o Modal para gerenciar ações rápidas flutuantes", "Open Modal To Manage Floating Quick Actions": "Abra o Modal para gerenciar ações rápidas flutuantes",
"Open Modal To Manage Image Compression": "", "Open Modal To Manage Image Compression": "Abrir o Modal para gerenciar a compressão de imagens",
"Open new chat": "Abrir novo chat", "Open new chat": "Abrir novo chat",
"Open Sidebar": "Abrir barra lateral", "Open Sidebar": "Abrir barra lateral",
"Open User Profile Menu": "Abrir menu de perfil do usuário", "Open User Profile Menu": "Abrir menu de perfil do usuário",
@ -1218,7 +1218,7 @@
"Redirecting you to Open WebUI Community": "Redirecionando você para a Comunidade OpenWebUI", "Redirecting you to Open WebUI Community": "Redirecionando você para a Comunidade OpenWebUI",
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduz a probabilidade de gerar respostas sem sentido. Um valor mais alto (por exemplo, 100) resultará em respostas mais diversas, enquanto um valor mais baixo (por exemplo, 10) será mais conservador.", "Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative.": "Reduz a probabilidade de gerar respostas sem sentido. Um valor mais alto (por exemplo, 100) resultará em respostas mais diversas, enquanto um valor mais baixo (por exemplo, 10) será mais conservador.",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refira-se como \"Usuário\" (por exemplo, \"Usuário está aprendendo espanhol\")", "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Refira-se como \"Usuário\" (por exemplo, \"Usuário está aprendendo espanhol\")",
"Reference Chats": "", "Reference Chats": "Chats Anteriores",
"Refused when it shouldn't have": "Recusado quando não deveria", "Refused when it shouldn't have": "Recusado quando não deveria",
"Regenerate": "Gerar novamente", "Regenerate": "Gerar novamente",
"Regenerate Menu": "Regenerar Menu", "Regenerate Menu": "Regenerar Menu",
@ -1568,7 +1568,7 @@
"Unarchive All Archived Chats": "Desarquivar Todos os Chats Arquivados", "Unarchive All Archived Chats": "Desarquivar Todos os Chats Arquivados",
"Unarchive Chat": "Desarquivar Chat", "Unarchive Chat": "Desarquivar Chat",
"Underline": "Sublinhado", "Underline": "Sublinhado",
"Unknown": "", "Unknown": "Desconhecido",
"Unloads {{FROM_NOW}}": "Descarrega {{FROM_NOW}}", "Unloads {{FROM_NOW}}": "Descarrega {{FROM_NOW}}",
"Unlock mysteries": "Desvendar mistérios", "Unlock mysteries": "Desvendar mistérios",
"Unpin": "Desfixar", "Unpin": "Desfixar",

View file

@ -487,7 +487,7 @@
"Edit Memory": "编辑记忆", "Edit Memory": "编辑记忆",
"Edit User": "编辑用户", "Edit User": "编辑用户",
"Edit User Group": "编辑用户组", "Edit User Group": "编辑用户组",
"edited": "", "edited": "已编辑",
"Edited": "已编辑", "Edited": "已编辑",
"Editing": "编辑中", "Editing": "编辑中",
"Eject": "弹出", "Eject": "弹出",
@ -630,7 +630,7 @@
"Enter Your Role": "输入您的权限组", "Enter Your Role": "输入您的权限组",
"Enter Your Username": "输入您的用户名", "Enter Your Username": "输入您的用户名",
"Enter your webhook URL": "输入您的 Webhook URL", "Enter your webhook URL": "输入您的 Webhook URL",
"Entra ID": "", "Entra ID": "Entra ID",
"Error": "错误", "Error": "错误",
"ERROR": "错误", "ERROR": "错误",
"Error accessing directory": "访问目录时出错", "Error accessing directory": "访问目录时出错",
@ -1608,7 +1608,7 @@
"User Webhooks": "用户 Webhook", "User Webhooks": "用户 Webhook",
"Username": "用户名", "Username": "用户名",
"Users": "用户", "Users": "用户",
"Uses DefaultAzureCredential to authenticate": "", "Uses DefaultAzureCredential to authenticate": "使用 DefaultAzureCredential 进行身份验证",
"Using Entire Document": "使用完整文档", "Using Entire Document": "使用完整文档",
"Using Focused Retrieval": "使用聚焦检索", "Using Focused Retrieval": "使用聚焦检索",
"Using the default arena model with all models. Click the plus button to add custom models.": "竞技场模型默认使用所有模型。点击上方的“+”按钮以添加自定义模型", "Using the default arena model with all models. Click the plus button to add custom models.": "竞技场模型默认使用所有模型。点击上方的“+”按钮以添加自定义模型",

View file

@ -487,7 +487,7 @@
"Edit Memory": "編輯記憶", "Edit Memory": "編輯記憶",
"Edit User": "編輯使用者", "Edit User": "編輯使用者",
"Edit User Group": "編輯使用者群組", "Edit User Group": "編輯使用者群組",
"edited": "", "edited": "已編輯",
"Edited": "已編輯", "Edited": "已編輯",
"Editing": "編輯中", "Editing": "編輯中",
"Eject": "卸載", "Eject": "卸載",
@ -630,7 +630,7 @@
"Enter Your Role": "輸入您的角色", "Enter Your Role": "輸入您的角色",
"Enter Your Username": "輸入您的使用者名稱", "Enter Your Username": "輸入您的使用者名稱",
"Enter your webhook URL": "輸入您的 webhook URL", "Enter your webhook URL": "輸入您的 webhook URL",
"Entra ID": "", "Entra ID": "Entra ID",
"Error": "錯誤", "Error": "錯誤",
"ERROR": "錯誤", "ERROR": "錯誤",
"Error accessing directory": "存取目錄時發生錯誤", "Error accessing directory": "存取目錄時發生錯誤",
@ -1608,7 +1608,7 @@
"User Webhooks": "使用者 Webhooks", "User Webhooks": "使用者 Webhooks",
"Username": "使用者名稱", "Username": "使用者名稱",
"Users": "使用者", "Users": "使用者",
"Uses DefaultAzureCredential to authenticate": "", "Uses DefaultAzureCredential to authenticate": "使用 DefaultAzureCredential 進行身份驗證",
"Using Entire Document": "使用完整檔案", "Using Entire Document": "使用完整檔案",
"Using Focused Retrieval": "使用聚焦檢索", "Using Focused Retrieval": "使用聚焦檢索",
"Using the default arena model with all models. Click the plus button to add custom models.": "正在使用預設競技場模型與所有模型。點選加號按鈕以新增自訂模型。", "Using the default arena model with all models. Click the plus button to add custom models.": "正在使用預設競技場模型與所有模型。點選加號按鈕以新增自訂模型。",