# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. import base64 import mimetypes import os import pytest from llama_stack.apis.datasets import Dataset # How to run this test: # # LLAMA_STACK_CONFIG="template-name" pytest -v tests/integration/datasets def data_url_from_file(file_path: str) -> str: if not os.path.exists(file_path): raise FileNotFoundError(f"File not found: {file_path}") with open(file_path, "rb") as file: file_content = file.read() base64_content = base64.b64encode(file_content).decode("utf-8") mime_type, _ = mimetypes.guess_type(file_path) data_url = f"data:{mime_type};base64,{base64_content}" return data_url @pytest.mark.skip(reason="flaky. Couldn't find 'llamastack/simpleqa' on the Hugging Face Hub") @pytest.mark.parametrize( "purpose, source, provider_id, limit", [ ( "eval/messages-answer", { "type": "uri", "uri": "huggingface://datasets/llamastack/simpleqa?split=train", }, "huggingface", 10, ), ( "eval/messages-answer", { "type": "rows", "rows": [ { "messages": [{"role": "user", "content": "Hello, world!"}], "answer": "Hello, world!", }, { "messages": [ { "role": "user", "content": "What is the capital of France?", } ], "answer": "Paris", }, ], }, "localfs", 2, ), ( "eval/messages-answer", { "type": "uri", "uri": data_url_from_file(os.path.join(os.path.dirname(__file__), "test_dataset.csv")), }, "localfs", 5, ), ], ) def test_register_and_iterrows(llama_stack_client, purpose, source, provider_id, limit): dataset = llama_stack_client.datasets.register( purpose=purpose, source=source, ) assert dataset.identifier is not None assert dataset.provider_id == provider_id iterrow_response = llama_stack_client.datasets.iterrows(dataset.identifier, limit=limit) assert len(iterrow_response.data) == limit dataset_list = llama_stack_client.datasets.list() assert dataset.identifier in [d.identifier for d in dataset_list] llama_stack_client.datasets.unregister(dataset.identifier) dataset_list = llama_stack_client.datasets.list() assert dataset.identifier not in [d.identifier for d in dataset_list] # nvidia provider only @pytest.mark.parametrize( "provider_id", [ "nvidia", ], ) def test_register_and_unregister(llama_stack_client, provider_id): purpose = "eval/messages-answer" source = { "type": "uri", "uri": "hf://datasets/llamastack/simpleqa?split=train", } dataset = llama_stack_client.datasets.register( dataset_id=f"test-dataset-{provider_id}", purpose=purpose, source=source, metadata={"provider": provider_id, "format": "json", "description": "Test dataset description"}, ) assert dataset.identifier is not None assert dataset.provider_id == provider_id assert dataset.identifier == f"test-dataset-{provider_id}" dataset_list = llama_stack_client.datasets.list() provider_datasets = [d for d in dataset_list if d.provider_id == provider_id] assert any(provider_datasets) assert any([d.identifier == f"test-dataset-{provider_id}" for d in provider_datasets]) llama_stack_client.datasets.unregister(dataset.identifier) dataset_list = llama_stack_client.datasets.list() provider_datasets = [d for d in dataset_list if d.identifier == dataset.identifier] assert not any(provider_datasets)