mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-28 05:27:35 +00:00
refac
This commit is contained in:
parent
78f48a21ee
commit
e623c02acc
4 changed files with 76 additions and 7 deletions
|
|
@ -169,7 +169,7 @@ function getInlineFileFromToolOutput(callItem?: OutputItem, resultItem?: OutputI
|
|||
}
|
||||
|
||||
const args = parseJSONStringValue(callItem.arguments) as Record<string, unknown>;
|
||||
if (!args || typeof args !== 'object' || args.inline !== true) {
|
||||
if (!args || typeof args !== 'object') {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -179,6 +179,7 @@ function getInlineFileFromToolOutput(callItem?: OutputItem, resultItem?: OutputI
|
|||
typeof result !== 'object' ||
|
||||
result.type !== 'file' ||
|
||||
result.source !== 'open_terminal' ||
|
||||
result.displayed !== true ||
|
||||
result.exists === false ||
|
||||
!result.path ||
|
||||
!result.terminal_selector
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
let scrollOnBranchChange = true;
|
||||
let scrollOnResponseGeneration = true;
|
||||
let showFilesOnTerminalSelect = true;
|
||||
let terminalFileDisplay: 'sidebar' | 'inline' = 'sidebar';
|
||||
let userLocation = false;
|
||||
|
||||
// Interface
|
||||
|
|
@ -298,6 +299,7 @@
|
|||
scrollOnBranchChange = currentSettings?.scrollOnBranchChange ?? true;
|
||||
scrollOnResponseGeneration = currentSettings?.scrollOnResponseGeneration ?? true;
|
||||
showFilesOnTerminalSelect = currentSettings?.showFilesOnTerminalSelect ?? true;
|
||||
terminalFileDisplay = currentSettings?.terminalFileDisplay === 'inline' ? 'inline' : 'sidebar';
|
||||
|
||||
temporaryChatByDefault = currentSettings?.temporaryChatByDefault ?? false;
|
||||
chatDirection = currentSettings?.chatDirection ?? 'auto';
|
||||
|
|
@ -1257,6 +1259,31 @@
|
|||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class={settingRowClass}>
|
||||
<div id="terminal-file-display-label" class={settingLabelClass}>
|
||||
{$i18n.t('Terminal File Display')}
|
||||
</div>
|
||||
|
||||
<button
|
||||
aria-labelledby="terminal-file-display-label terminal-file-display-state"
|
||||
class={actionButtonClass}
|
||||
on:click={() => {
|
||||
terminalFileDisplay = terminalFileDisplay === 'inline' ? 'sidebar' : 'inline';
|
||||
saveSettings({ terminalFileDisplay });
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
<span id="terminal-file-display-state">
|
||||
{terminalFileDisplay === 'inline' ? $i18n.t('Inline') : $i18n.t('Sidebar')}
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<p class={settingDescriptionClass}>
|
||||
{$i18n.t('Choose where terminal display_file results appear by default.')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class={settingRowClass}>
|
||||
<div id="show-files-on-terminal-select-label" class={settingLabelClass}>
|
||||
|
|
|
|||
|
|
@ -252,6 +252,7 @@ type Settings = {
|
|||
scrollOnBranchChange?: boolean;
|
||||
scrollOnResponseGeneration?: boolean;
|
||||
showFilesOnTerminalSelect?: boolean;
|
||||
terminalFileDisplay?: 'sidebar' | 'inline';
|
||||
directConnections?: null;
|
||||
chatBubble?: boolean;
|
||||
copyFormatted?: boolean;
|
||||
|
|
|
|||
|
|
@ -459,8 +459,41 @@
|
|||
return { toolServer, toolServerData, token };
|
||||
};
|
||||
|
||||
const isDirectTerminalServer = (serverUrl) =>
|
||||
!!serverUrl &&
|
||||
(($settings?.terminalServers ?? []).some((server) => server.url === serverUrl) ||
|
||||
($terminalServers ?? []).some((server) => !server.id && server.url === serverUrl));
|
||||
|
||||
const terminalFileResult = (result, params, serverUrl, chatId) => {
|
||||
const path = result?.path ?? params?.path;
|
||||
const name = result?.name ?? String(path ?? '').split('/').filter(Boolean).at(-1) ?? 'file';
|
||||
const contentType = result?.content_type ?? result?.mime_type ?? 'application/octet-stream';
|
||||
|
||||
return {
|
||||
...(result ?? {}),
|
||||
type: 'file',
|
||||
source: 'open_terminal',
|
||||
displayed: true,
|
||||
terminal_selector: serverUrl,
|
||||
terminal_url: serverUrl,
|
||||
session_id: chatId,
|
||||
path,
|
||||
full_path: result?.full_path ?? path,
|
||||
name,
|
||||
mime_type: contentType,
|
||||
content_type: contentType
|
||||
};
|
||||
};
|
||||
|
||||
const executeTool = async (data, cb, chatId) => {
|
||||
const { toolServer, toolServerData, token } = resolveToolServer(data.server?.url);
|
||||
const defaultInline =
|
||||
data?.name === 'display_file' &&
|
||||
data?.params?.path &&
|
||||
data?.params?.inline === undefined &&
|
||||
$settings?.terminalFileDisplay === 'inline' &&
|
||||
isDirectTerminalServer(data.server?.url);
|
||||
const params = defaultInline ? { ...data.params, inline: true } : data?.params;
|
||||
|
||||
console.log('executeTool', data, toolServer);
|
||||
|
||||
|
|
@ -469,26 +502,33 @@
|
|||
token,
|
||||
toolServer.url,
|
||||
data?.name,
|
||||
data?.params,
|
||||
params,
|
||||
toolServerData,
|
||||
chatId
|
||||
);
|
||||
|
||||
console.log('executeToolServer', res);
|
||||
const result = Array.isArray(res) ? res[0] : res;
|
||||
const inlineDisplayFile = data?.name === 'display_file' && params?.path && params?.inline === true;
|
||||
const output =
|
||||
inlineDisplayFile && result?.exists !== false
|
||||
? Array.isArray(res)
|
||||
? [terminalFileResult(result, params, toolServer.url, chatId)]
|
||||
: terminalFileResult(result, params, toolServer.url, chatId)
|
||||
: res;
|
||||
|
||||
if (data?.name === 'display_file' && data?.params?.path && data?.params?.inline !== true) {
|
||||
if (data?.name === 'display_file' && params?.path && !inlineDisplayFile) {
|
||||
if (result?.exists !== false) {
|
||||
displayFileHandler(data.params.path, { showControls, showFileNavPath });
|
||||
displayFileHandler(params.path, { showControls, showFileNavPath });
|
||||
}
|
||||
}
|
||||
|
||||
if (['write_file'].includes(data?.name) && data?.params?.path) {
|
||||
showFileNavDir.set(result?.path ?? data.params.path);
|
||||
if (['write_file'].includes(data?.name) && params?.path) {
|
||||
showFileNavDir.set(result?.path ?? params.path);
|
||||
}
|
||||
|
||||
if (cb) {
|
||||
cb(structuredClone(res));
|
||||
cb(structuredClone(output));
|
||||
}
|
||||
} else {
|
||||
if (cb) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue