|
@@ -0,0 +1,94 @@
|
|
|
|
|
+import { json } from '@sveltejs/kit';
|
|
|
|
|
+
|
|
|
|
|
+import { server } from '$lib/server';
|
|
|
|
|
+import type { AgentResources } from '$lib/server/resources/agents';
|
|
|
|
|
+import type { DocumentResources } from '$lib/server/resources/documents';
|
|
|
|
|
+import type { KBResources } from '$lib/server/resources/kbs';
|
|
|
|
|
+import type { ModelResources } from '$lib/server/resources/models';
|
|
|
|
|
+import type { ToolResources } from '$lib/server/resources/tools';
|
|
|
|
|
+import type {
|
|
|
|
|
+ AgentCR,
|
|
|
|
|
+ DocumentCR,
|
|
|
|
|
+ ExternalKBCR,
|
|
|
|
|
+ ExternalModelCR,
|
|
|
|
|
+ ExternalToolCR,
|
|
|
|
|
+ ManagedKBCR,
|
|
|
|
|
+ ManagedModelCR,
|
|
|
|
|
+ ManagedToolCR,
|
|
|
|
|
+} from '$lib/types/custom-resources';
|
|
|
|
|
+import type { KnowledgeBase, Model, Tool } from '$lib/types/entities';
|
|
|
|
|
+
|
|
|
|
|
+import type { RequestHandler } from './$types';
|
|
|
|
|
+
|
|
|
|
|
+const GET: RequestHandler = async ({ locals, params }) => {
|
|
|
|
|
+ const workspace = locals.workspace!;
|
|
|
|
|
+ const { resource: resourceType } = params;
|
|
|
|
|
+ const catalog = server.catalog.getWorkspaceCatalog(workspace.id)[resourceType];
|
|
|
|
|
+ const items = await catalog.list();
|
|
|
|
|
+ const item = items.find((r) => r.id === params.id);
|
|
|
|
|
+ if (!item)
|
|
|
|
|
+ return json({ code: 'NOT_FOUND', message: `${resourceType} not found` }, { status: 404 });
|
|
|
|
|
+ return json(item);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const PUT: RequestHandler = async ({ locals, params, request }) => {
|
|
|
|
|
+ const workspace = locals.workspace!;
|
|
|
|
|
+ const { id, resource: resourceType } = params;
|
|
|
|
|
+ const input = await request.json();
|
|
|
|
|
+ input.id = id;
|
|
|
|
|
+ const catalog = server.catalog.getWorkspaceCatalog(workspace.id)[resourceType];
|
|
|
|
|
+ const { entity: updated, cr } = await catalog.update(input);
|
|
|
|
|
+ const resources = server.resources.getWorkspaceResources(workspace.id)[resourceType];
|
|
|
|
|
+ if (updated) {
|
|
|
|
|
+ if (resourceType === 'models') {
|
|
|
|
|
+ if ((updated as Model).mode === 'external')
|
|
|
|
|
+ await (resources as ModelResources).applyExternalModel(cr as ExternalModelCR);
|
|
|
|
|
+ else await (resources as ModelResources).applyManagedModel(cr as ManagedModelCR);
|
|
|
|
|
+ } else if (resourceType === 'tools') {
|
|
|
|
|
+ if ((updated as Tool).mode === 'external')
|
|
|
|
|
+ await (resources as ToolResources).applyExternalTool(cr as ExternalToolCR);
|
|
|
|
|
+ else await (resources as ToolResources).applyManagedTool(cr as ManagedToolCR);
|
|
|
|
|
+ } else if (resourceType === 'kbs') {
|
|
|
|
|
+ if ((updated as KnowledgeBase).mode === 'external')
|
|
|
|
|
+ await (resources as KBResources).applyExternalKB(cr as ExternalKBCR);
|
|
|
|
|
+ else await (resources as KBResources).applyManagedKB(cr as ManagedKBCR);
|
|
|
|
|
+ } else if (resourceType === 'documents') {
|
|
|
|
|
+ await (resources as DocumentResources).applyDocument(cr as DocumentCR);
|
|
|
|
|
+ } else if (resourceType === 'agents') {
|
|
|
|
|
+ await (resources as AgentResources).applyAgent(cr as AgentCR);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return json(updated);
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const DELETE: RequestHandler = async ({ locals, params }) => {
|
|
|
|
|
+ const workspace = locals.workspace!;
|
|
|
|
|
+ const { id, resource: resourceType } = params;
|
|
|
|
|
+ const catalog = server.catalog.getWorkspaceCatalog(workspace.id)[resourceType];
|
|
|
|
|
+ const items = await catalog.list();
|
|
|
|
|
+ const item = items.find((r) => r.id === id);
|
|
|
|
|
+ if (!item)
|
|
|
|
|
+ return json({ code: 'NOT_FOUND', message: `${resourceType} not found` }, { status: 404 });
|
|
|
|
|
+ await catalog.delete(id);
|
|
|
|
|
+ const resources = server.resources.getWorkspaceResources(workspace.id)[resourceType];
|
|
|
|
|
+ if (resourceType === 'models') {
|
|
|
|
|
+ if ((item as Model).mode === 'external')
|
|
|
|
|
+ await (resources as ModelResources).deleteExternalModel(id);
|
|
|
|
|
+ else await (resources as ModelResources).deleteManagedModel(id);
|
|
|
|
|
+ } else if (resourceType === 'tools') {
|
|
|
|
|
+ if ((item as Tool).mode === 'external')
|
|
|
|
|
+ await (resources as ToolResources).deleteExternalTool(id);
|
|
|
|
|
+ else await (resources as ToolResources).deleteManagedTool(id);
|
|
|
|
|
+ } else if (resourceType === 'kbs') {
|
|
|
|
|
+ if ((item as KnowledgeBase).mode === 'external')
|
|
|
|
|
+ await (resources as KBResources).deleteExternalKB(id);
|
|
|
|
|
+ else await (resources as KBResources).deleteManagedKB(id);
|
|
|
|
|
+ } else if (resourceType === 'documents') {
|
|
|
|
|
+ await (resources as DocumentResources).deleteDocument(id);
|
|
|
|
|
+ } else if (resourceType === 'agents') {
|
|
|
|
|
+ await (resources as AgentResources).deleteAgent(id);
|
|
|
|
|
+ }
|
|
|
|
|
+ return new Response(null, { status: 204 });
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+export { DELETE, GET, PUT };
|