refac: external tools server support

This commit is contained in:
Timothy Jaeryang Baek
2025-03-27 02:27:56 -07:00
parent 69dee19568
commit d1bc2cfa2f
9 changed files with 264 additions and 30 deletions

View File

@@ -12,7 +12,7 @@
import { getKnowledgeBases } from '$lib/apis/knowledge';
import { getFunctions } from '$lib/apis/functions';
import { getModels, getVersionUpdates } from '$lib/apis';
import { getModels, getToolServersData, getVersionUpdates } from '$lib/apis';
import { getAllTags } from '$lib/apis/chats';
import { getPrompts } from '$lib/apis/prompts';
import { getTools } from '$lib/apis/tools';
@@ -35,7 +35,8 @@
banners,
showSettings,
showChangelog,
temporaryChatEnabled
temporaryChatEnabled,
toolServers
} from '$lib/stores';
import Sidebar from '$lib/components/layout/Sidebar.svelte';
@@ -43,6 +44,7 @@
import ChangelogModal from '$lib/components/ChangelogModal.svelte';
import AccountPending from '$lib/components/layout/Overlay/AccountPending.svelte';
import UpdateInfoToast from '$lib/components/layout/UpdateInfoToast.svelte';
import { get } from 'svelte/store';
const i18n = getContext('i18n');
@@ -99,8 +101,10 @@
$config?.features?.enable_direct_connections && ($settings?.directConnections ?? null)
)
);
banners.set(await getBanners(localStorage.token));
tools.set(await getTools(localStorage.token));
toolServers.set(await getToolServersData($settings?.toolServers ?? []));
document.addEventListener('keydown', async function (event) {
const isCtrlPressed = event.ctrlKey || event.metaKey; // metaKey is for Cmd key on Mac

View File

@@ -31,7 +31,7 @@
import { page } from '$app/stores';
import { Toaster, toast } from 'svelte-sonner';
import { getBackendConfig } from '$lib/apis';
import { executeToolServer, getBackendConfig } from '$lib/apis';
import { getSessionUser } from '$lib/apis/auths';
import '../tailwind.css';
@@ -205,17 +205,36 @@
const executeTool = async (data, cb) => {
console.log(data);
// TODO: MCP (SSE) support
// TODO: API Server support
if (cb) {
cb(
JSON.parse(
JSON.stringify({
result: null
})
)
);
const toolServer = $settings?.toolServers?.find((server) => server.url === data.server?.url);
if (toolServer) {
const res = await executeToolServer(
toolServer.key,
toolServer.url,
data?.name,
data?.params,
toolServer
).catch((error) => {
console.error('executeToolServer', error);
return {
error: error
};
});
if (cb) {
cb(JSON.parse(JSON.stringify(res)));
}
} else {
if (cb) {
cb(
JSON.parse(
JSON.stringify({
error: 'Tool Server Not Found'
})
)
);
}
}
};