From aaf975951c5f1fdb82609ec817593d4e093c81be Mon Sep 17 00:00:00 2001 From: vishnu r kumar Date: Fri, 4 Sep 2026 16:50:55 +0530 Subject: [PATCH] feat: move kb to config api and add cache layer --- .../client/src/api/knowledge-base-service.ts | 22 ++- .../src/components/KnowledgeBaseCard.tsx | 5 +- .../client/src/components/ResourceCard.tsx | 15 +- .../CreateKnowledgeBaseDialog.tsx | 15 +- .../EditKnowledgeBaseDialog.tsx | 172 ++++++++++++++++++ .../apps/[appId]/knowledge-bases/index.tsx | 35 +++- wavefront/client/src/pages/apps/layout.tsx | 2 +- .../floware/controllers/config_controller.py | 19 +- .../floware/di/application_container.py | 25 ++- .../floware/floware/repositories/__init__.py | 11 ++ .../repositories/base_cached_repository.py | 40 ++++ .../floware/repositories/config_repository.py | 30 +++ .../repositories/datasource_repository.py | 19 ++ .../repositories/knowledge_base_repository.py | 17 ++ .../server/apps/floware/floware/server.py | 6 +- .../floware/services/config_service.py | 47 +++-- .../server/apps/floware/tests/conftest.py | 9 + .../db_repo_module/cache/application_cache.py | 34 ++++ .../db_repo_module/models/datasource.py | 6 +- .../controllers/knowledge_base_controller.py | 102 +++++++---- .../models/knowledge_base_schema.py | 6 + .../controllers/datasource_controller.py | 11 +- 22 files changed, 552 insertions(+), 96 deletions(-) create mode 100644 wavefront/client/src/pages/apps/[appId]/knowledge-bases/EditKnowledgeBaseDialog.tsx create mode 100644 wavefront/server/apps/floware/floware/repositories/__init__.py create mode 100644 wavefront/server/apps/floware/floware/repositories/base_cached_repository.py create mode 100644 wavefront/server/apps/floware/floware/repositories/config_repository.py create mode 100644 wavefront/server/apps/floware/floware/repositories/datasource_repository.py create mode 100644 wavefront/server/apps/floware/floware/repositories/knowledge_base_repository.py create mode 100644 wavefront/server/modules/db_repo_module/db_repo_module/cache/application_cache.py diff --git a/wavefront/client/src/api/knowledge-base-service.ts b/wavefront/client/src/api/knowledge-base-service.ts index 95ba6002..2adc22e2 100644 --- a/wavefront/client/src/api/knowledge-base-service.ts +++ b/wavefront/client/src/api/knowledge-base-service.ts @@ -9,22 +9,26 @@ export interface NewKnowledgeBasePayload { vector_size: number; } +// Interface for partially updating a knowledge base +export interface UpdateKnowledgeBasePayload { + name?: string; + description?: string; + type?: string; +} + export interface KbData { id: string; name: string; description: string; + type: string; created_at: string; updated_at: string; } -// Interface for knowledge base data -export interface KnowledgeBaseData { - data: KbData; -} export type KnowledgeBaseDetail = IApiResponse; // Interface for a single knowledge base response -export type KnowledgeBaseDetailResponse = IApiResponse; +export type KnowledgeBaseDetailResponse = IApiResponse; // Interface for listing knowledge bases export interface KnowledgeBaseListData { @@ -96,6 +100,14 @@ export class KnowledgeBaseService { return response; } + async updateKnowledgeBase(kbId: string, payload: UpdateKnowledgeBasePayload): Promise { + const response: KnowledgeBaseDetailResponse = await this.http.patch( + `/v1/:appId/floware/v1/knowledge-bases/${kbId}`, + payload + ); + return response; + } + async listKnowledgeBases(offset: number = 0, limit: number = 10): Promise { const response: KnowledgeBaseListResponse = await this.http.get(`/v1/:appId/floware/v1/knowledge-bases`, { params: { offset, limit }, diff --git a/wavefront/client/src/components/KnowledgeBaseCard.tsx b/wavefront/client/src/components/KnowledgeBaseCard.tsx index b244a307..5cd34997 100644 --- a/wavefront/client/src/components/KnowledgeBaseCard.tsx +++ b/wavefront/client/src/components/KnowledgeBaseCard.tsx @@ -6,9 +6,10 @@ interface KnowledgeBaseCardProps { kb: KbData; onClick: (kbId: string) => void; onDeleteClick: (e: React.MouseEvent, kb: KbData) => void; + onEditClick?: (e: React.MouseEvent, kb: KbData) => void; } -const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDeleteClick }) => { +const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDeleteClick, onEditClick }) => { const metadata: ResourceCardMetadata[] = [ { label: 'Knowledge Base ID', @@ -24,7 +25,9 @@ const KnowledgeBaseCard: React.FC = ({ kb, onClick, onDe metadata={metadata} onClick={() => onClick(kb.id)} onDeleteClick={(e) => onDeleteClick(e, kb)} + onEditClick={onEditClick ? (e) => onEditClick(e, kb) : undefined} deleteTitle="Delete knowledge base" + editTitle="Edit knowledge base" /> ); }; diff --git a/wavefront/client/src/components/ResourceCard.tsx b/wavefront/client/src/components/ResourceCard.tsx index 50c84183..13c6ae5f 100644 --- a/wavefront/client/src/components/ResourceCard.tsx +++ b/wavefront/client/src/components/ResourceCard.tsx @@ -1,4 +1,4 @@ -import { TrashIcon } from 'lucide-react'; +import { Pencil, TrashIcon } from 'lucide-react'; import React from 'react'; export interface ResourceCardMetadata { @@ -14,7 +14,9 @@ interface ResourceCardProps { metadata: ResourceCardMetadata[]; onClick: () => void; onDeleteClick: (e: React.MouseEvent) => void; + onEditClick?: (e: React.MouseEvent) => void; deleteTitle?: string; + editTitle?: string; } const ResourceCard: React.FC = ({ @@ -23,7 +25,9 @@ const ResourceCard: React.FC = ({ metadata, onClick, onDeleteClick, + onEditClick, deleteTitle = 'Delete', + editTitle = 'Edit', }) => { return (
= ({ {title}
+ {onEditClick && ( + + )}