add list_by_type tool

This commit is contained in:
phernandez
2024-12-30 14:44:23 -06:00
parent 566a796d68
commit 8dd2de3e9a
8 changed files with 192 additions and 25 deletions
@@ -1,10 +1,12 @@
"""Router for knowledge discovery and analytics operations."""
from typing import Optional
from fastapi import APIRouter
from loguru import logger
from basic_memory.deps import EntityServiceDep, ObservationServiceDep
from basic_memory.schemas import EntityTypeList, ObservationCategoryList
from basic_memory.schemas import EntityTypeList, ObservationCategoryList, TypedEntityList, EntityResponse
router = APIRouter(prefix="/discovery", tags=["discovery"])
@@ -23,3 +25,26 @@ async def get_observation_categories(observation_service: ObservationServiceDep)
logger.debug("Getting all observation categories")
categories = await observation_service.observation_categories()
return ObservationCategoryList(categories=categories)
@router.get("/entities/{entity_type}", response_model=TypedEntityList)
async def list_entities_by_type(
entity_service: EntityServiceDep,
entity_type: str,
include_related: bool = False,
sort_by: Optional[str] = "updated_at",
) -> TypedEntityList:
"""List all entities of a specific type."""
logger.debug(f"Listing entities of type: {entity_type}")
entities = await entity_service.list_entities(
entity_type=entity_type,
sort_by=sort_by,
include_related=include_related
)
return TypedEntityList(
entity_type=entity_type,
entities=[EntityResponse.model_validate(e) for e in entities],
total=len(entities),
sort_by=sort_by,
include_related=include_related
)