Skip to content

pixano.app.api.items

get_dataset_item(ds_id, item_id, settings) async

Load dataset item

Parameters:

Name Type Description Default
ds_id str

Dataset ID

required
item_id str

Item ID

required

Returns:

Type Description
DatasetItem

Dataset item

Source code in pixano/app/api/items.py
@router.get("/items/{item_id}", response_model=DatasetItem)
async def get_dataset_item(
    ds_id: str,
    item_id: str,
    settings: Annotated[Settings, Depends(get_settings)],
) -> DatasetItem:
    """Load dataset item

    Args:
        ds_id (str): Dataset ID
        item_id (str): Item ID

    Returns:
        DatasetItem: Dataset item
    """

    # Load dataset
    dataset = Dataset.find(ds_id, settings.data_dir)

    if dataset:
        # Load dataset item
        item = dataset.load_item(item_id, load_objects=True)

        # Return dataset item
        if item:
            return item
        raise HTTPException(
            status_code=404,
            detail=f"Item '{item_id}' not found in dataset",
        )
    raise HTTPException(
        status_code=404,
        detail=f"Dataset {ds_id} not found in {settings.data_dir.absolute()}",
    )

get_dataset_items(ds_id, settings, params=Depends()) async

Load dataset items

Parameters:

Name Type Description Default
ds_id str

Dataset ID

required
params Params

Pagination parameters (offset and limit). Defaults to Depends().

Depends()

Returns:

Type Description
Page[DatasetItem]

Dataset items page

Source code in pixano/app/api/items.py
@router.get("/items", response_model=Page[DatasetItem])
async def get_dataset_items(
    ds_id: str,
    settings: Annotated[Settings, Depends(get_settings)],
    params: Params = Depends(),
) -> Page[DatasetItem]:
    """Load dataset items

    Args:
        ds_id (str): Dataset ID
        params (Params, optional): Pagination parameters (offset and limit). Defaults to Depends().

    Returns:
        Page[DatasetItem]: Dataset items page
    """

    # Load dataset
    dataset = Dataset.find(ds_id, settings.data_dir)

    if dataset:
        # Get page parameters
        params = resolve_params(params)
        raw_params = params.to_raw_params()
        total = dataset.num_rows

        # Check page parameters
        start = raw_params.offset
        stop = min(raw_params.offset + raw_params.limit, total)
        if start >= stop:
            raise HTTPException(
                status_code=404,
                detail=f"Invalid page parameters (start {start}, stop {stop})",
            )

        # Load dataset items
        items = dataset.load_items(raw_params.limit, raw_params.offset)

        # Return dataset items
        if items:
            return create_page(items, total=total, params=params)
        raise HTTPException(
            status_code=404,
            detail=f"No items found with page parameters (start {start}, stop {stop}) in dataset",
        )
    raise HTTPException(
        status_code=404,
        detail=f"Dataset {ds_id} not found in {settings.data_dir.absolute()}",
    )

get_item_embeddings(ds_id, item_id, model_id, settings) async

Load dataset item embeddings

Parameters:

Name Type Description Default
ds_id str

Dataset ID

required
item_id str

Item ID

required
model_id str

Model ID (ONNX file path)

required
Source code in pixano/app/api/items.py
@router.get(
    "/items/{item_id}/embeddings/{model_id}",
    response_model=DatasetItem,
)
async def get_item_embeddings(
    ds_id: str,
    item_id: str,
    model_id: str,
    settings: Annotated[Settings, Depends(get_settings)],
) -> DatasetItem:
    """Load dataset item embeddings

    Args:
        ds_id (str): Dataset ID
        item_id (str): Item ID
        model_id (str): Model ID (ONNX file path)
    """

    # Load dataset
    dataset = Dataset.find(ds_id, settings.data_dir)

    if dataset:
        item = dataset.load_item(
            item_id,
            load_media=False,
            load_active_learning=False,
            load_embeddings=True,
            model_id=model_id,
        )

        # Return dataset item embeddings
        if item:
            return item
        raise HTTPException(
            status_code=404,
            detail=f"No embeddings found for item '{item_id}' with model '{model_id}' in dataset",
        )
    raise HTTPException(
        status_code=404,
        detail=f"Dataset {ds_id} not found in {settings.data_dir.absolute()}",
    )

post_dataset_item(ds_id, item, settings) async

Save dataset item

Parameters:

Name Type Description Default
ds_id str

Dataset ID

required
item DatasetItem

Item to save

required
Source code in pixano/app/api/items.py
@router.post("/items/{item_id}", response_model=DatasetItem)
async def post_dataset_item(
    ds_id: str,
    item: DatasetItem,
    settings: Annotated[Settings, Depends(get_settings)],
):
    """Save dataset item

    Args:
        ds_id (str): Dataset ID
        item (DatasetItem): Item to save
    """

    # Load dataset
    dataset = Dataset.find(ds_id, settings.data_dir)

    if dataset:
        # Save dataset item
        dataset.save_item(item)

        # Return response
        return Response()
    raise HTTPException(
        status_code=404,
        detail=f"Dataset {ds_id} not found in {settings.data_dir.absolute()}",
    )

search_dataset_items(ds_id, query, settings, params=Depends()) async

Load dataset items with a query

Parameters:

Name Type Description Default
ds_id str

Dataset ID

required
query dict[str, str]

Search query

required
params Params

Pagination parameters (offset and limit). Defaults to Depends().

Depends()

Returns:

Type Description
Page[DatasetItem]

Dataset items page

Source code in pixano/app/api/items.py
@router.post("/search", response_model=Page[DatasetItem])
async def search_dataset_items(
    ds_id: str,
    query: dict[str, str],
    settings: Annotated[Settings, Depends(get_settings)],
    params: Params = Depends(),
) -> Page[DatasetItem]:
    """Load dataset items with a query

    Args:
        ds_id (str): Dataset ID
        query (dict[str, str]): Search query
        params (Params, optional): Pagination parameters (offset and limit). Defaults to Depends().

    Returns:
        Page[DatasetItem]: Dataset items page
    """

    # Load dataset
    dataset = Dataset.find(ds_id, settings.data_dir)

    if dataset:
        # Get page parameters
        params = resolve_params(params)
        raw_params = params.to_raw_params()
        total = dataset.num_rows

        # Check page parameters
        start = raw_params.offset
        stop = min(raw_params.offset + raw_params.limit, total)
        if start >= stop:
            raise HTTPException(status_code=404, detail="Invalid page parameters")

        # Load dataset items
        items = dataset.search_items(raw_params.limit, raw_params.offset, query)

        # Return dataset items
        if items:
            return create_page(items, total=total, params=params)
        raise HTTPException(
            status_code=404, detail=f"No items found for query '{query}' in dataset"
        )
    raise HTTPException(
        status_code=404,
        detail=f"Dataset {ds_id} not found in {settings.data_dir.absolute()}",
    )