From 3fc24b12f511dfac93a9b361cd2db843d92b9d6b Mon Sep 17 00:00:00 2001 From: Dinesh Yeduguru Date: Thu, 23 Jan 2025 15:23:15 -0800 Subject: [PATCH 1/2] update the cli for 0.1.0 --- docs/cli_reference.md | 72 ++++++--- .../lib/cli/llama_stack_client.py | 6 +- .../lib/cli/memory_banks/memory_banks.py | 143 ------------------ .../{memory_banks => vector_dbs}/__init__.py | 4 +- .../lib/cli/vector_dbs/vector_dbs.py | 115 ++++++++++++++ 5 files changed, 175 insertions(+), 165 deletions(-) delete mode 100644 src/llama_stack_client/lib/cli/memory_banks/memory_banks.py rename src/llama_stack_client/lib/cli/{memory_banks => vector_dbs}/__init__.py (75%) create mode 100644 src/llama_stack_client/lib/cli/vector_dbs/vector_dbs.py diff --git a/docs/cli_reference.md b/docs/cli_reference.md index 954345eb..f9b7dd38 100644 --- a/docs/cli_reference.md +++ b/docs/cli_reference.md @@ -100,34 +100,33 @@ $ llama-stack-client models update [--provider-id ] [--p $ llama-stack-client models delete ``` -#### `llama-stack-client memory_banks list` +#### `llama-stack-client vector_dbs list` ```bash -$ llama-stack-client memory_banks list +$ llama-stack-client vector_dbs list ``` ``` -+--------------+----------------+--------+-------------------+------------------------+--------------------------+ -| identifier | provider_id | type | embedding_model | chunk_size_in_tokens | overlap_size_in_tokens | -+==============+================+========+===================+========================+==========================+ -| test_bank | meta-reference | vector | all-MiniLM-L6-v2 | 512 | 64 | -+--------------+----------------+--------+-------------------+------------------------+--------------------------+ ++--------------+----------------+---------------------+---------------+------------------------+ +| identifier | provider_id | provider_resource_id| vector_db_type| params | ++==============+================+=====================+===============+========================+ +| test_bank | meta-reference | test_bank | vector | embedding_model: all-MiniLM-L6-v2 + embedding_dimension: 384| ++--------------+----------------+---------------------+---------------+------------------------+ ``` -#### `llama-stack-client memory_banks register` +#### `llama-stack-client vector_dbs register` ```bash -$ llama-stack-client memory_banks register --type [--provider-id ] [--provider-memory-bank-id ] [--chunk-size ] [--embedding-model ] [--overlap-size ] +$ llama-stack-client vector_dbs register [--provider-id ] [--provider-vector-db-id ] [--embedding-model ] [--embedding-dimension ] ``` Options: -- `--type`: Required. Type of memory bank. Choices: "vector", "keyvalue", "keyword", "graph" -- `--provider-id`: Optional. Provider ID for the memory bank -- `--provider-memory-bank-id`: Optional. Provider's memory bank ID -- `--chunk-size`: Optional. Chunk size in tokens (for vector type). Default: 512 -- `--embedding-model`: Optional. Embedding model (for vector type). Default: "all-MiniLM-L6-v2" -- `--overlap-size`: Optional. Overlap size in tokens (for vector type). Default: 64 +- `--provider-id`: Optional. Provider ID for the vector db +- `--provider-vector-db-id`: Optional. Provider's vector db ID +- `--embedding-model`: Optional. Embedding model to use. Default: "all-MiniLM-L6-v2" +- `--embedding-dimension`: Optional. Dimension of embeddings. Default: 384 -#### `llama-stack-client memory_banks unregister` +#### `llama-stack-client vector_dbs unregister` ```bash -$ llama-stack-client memory_banks unregister +$ llama-stack-client vector_dbs unregister ``` #### `llama-stack-client shields list` @@ -212,3 +211,42 @@ Options: - `--output-dir`: Required. Path to the directory where scoring results will be saved - `--num-examples`: Optional. Number of examples to evaluate (useful for debugging) - `--visualize`: Optional flag. If set, visualizes scoring results after completion + +#### `llama-stack-client toolgroups list` +```bash +$ llama-stack-client toolgroups list +``` +``` ++---------------------------+------------------+------+---------------+ +| identifier | provider_id | args | mcp_endpoint | ++===========================+==================+======+===============+ +| builtin::code_interpreter | code-interpreter | None | None | ++---------------------------+------------------+------+---------------+ +| builtin::rag | rag-runtime | None | None | ++---------------------------+------------------+------+---------------+ +| builtin::websearch | tavily-search | None | None | ++---------------------------+------------------+------+---------------+ +``` + +#### `llama-stack-client toolgroups get` +```bash +$ llama-stack-client toolgroups get +``` + +Shows detailed information about a specific toolgroup. If the toolgroup is not found, displays an error message. + +#### `llama-stack-client toolgroups register` +```bash +$ llama-stack-client toolgroups register [--provider-id ] [--provider-toolgroup-id ] [--mcp-config ] [--args ] +``` + +Options: +- `--provider-id`: Optional. Provider ID for the toolgroup +- `--provider-toolgroup-id`: Optional. Provider's toolgroup ID +- `--mcp-config`: Optional. JSON configuration for the MCP endpoint +- `--args`: Optional. JSON arguments for the toolgroup + +#### `llama-stack-client toolgroups unregister` +```bash +$ llama-stack-client toolgroups unregister +``` \ No newline at end of file diff --git a/src/llama_stack_client/lib/cli/llama_stack_client.py b/src/llama_stack_client/lib/cli/llama_stack_client.py index 0a3eeb35..1bd5cfac 100644 --- a/src/llama_stack_client/lib/cli/llama_stack_client.py +++ b/src/llama_stack_client/lib/cli/llama_stack_client.py @@ -19,13 +19,13 @@ from .eval_tasks import eval_tasks from .inference import inference from .inspect import inspect -from .memory_banks import memory_banks from .models import models from .post_training import post_training from .providers import providers from .scoring_functions import scoring_functions from .shields import shields from .toolgroups import toolgroups +from .vector_dbs import vector_dbs @click.group() @@ -60,7 +60,7 @@ def cli(ctx, endpoint: str, config: str | None): click.echo("Falling back to HTTP client with endpoint", err=True) if endpoint == "": - endpoint = "http://localhost:5000" + endpoint = "http://localhost:8321" client = LlamaStackClient( base_url=endpoint, @@ -75,7 +75,7 @@ def cli(ctx, endpoint: str, config: str | None): # Register all subcommands cli.add_command(models, "models") -cli.add_command(memory_banks, "memory_banks") +cli.add_command(vector_dbs, "vector_dbs") cli.add_command(shields, "shields") cli.add_command(eval_tasks, "eval_tasks") cli.add_command(providers, "providers") diff --git a/src/llama_stack_client/lib/cli/memory_banks/memory_banks.py b/src/llama_stack_client/lib/cli/memory_banks/memory_banks.py deleted file mode 100644 index d38fb6bb..00000000 --- a/src/llama_stack_client/lib/cli/memory_banks/memory_banks.py +++ /dev/null @@ -1,143 +0,0 @@ -# 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. - -from typing import Optional - -import click -import yaml -from rich.console import Console -from rich.table import Table - -from ..common.utils import handle_client_errors - - -@click.group() -def memory_banks(): - """Query details about available memory banks type on distribution.""" - pass - - -@click.command("list") -@click.pass_context -@handle_client_errors("list memory banks") -def list(ctx): - """Show available memory banks on distribution endpoint""" - - client = ctx.obj["client"] - console = Console() - memory_banks_list_response = client.memory_banks.list() - - if memory_banks_list_response: - table = Table() - # Add our specific columns - table.add_column("identifier") - table.add_column("provider_id") - table.add_column("provider_resource_id") - table.add_column("memory_bank_type") - table.add_column("params") - - for item in memory_banks_list_response: - # Create a dict of all attributes - item_dict = item.__dict__ - - # Extract our main columns - identifier = str(item_dict.pop("identifier", "")) - provider_id = str(item_dict.pop("provider_id", "")) - provider_resource_id = str(item_dict.pop("provider_resource_id", "")) - memory_bank_type = str(item_dict.pop("memory_bank_type", "")) - # Convert remaining attributes to YAML string for params column - params = yaml.dump(item_dict, default_flow_style=False) - - table.add_row(identifier, provider_id, provider_resource_id, memory_bank_type, params) - - console.print(table) - - -@memory_banks.command() -@click.argument("memory-bank-id") -@click.option("--type", type=click.Choice(["vector", "keyvalue", "keyword", "graph"]), required=True) -@click.option("--provider-id", help="Provider ID for the memory bank", default=None) -@click.option("--provider-memory-bank-id", help="Provider's memory bank ID", default=None) -@click.option( - "--chunk-size", - type=int, - help="Chunk size in tokens (for vector type)", - default=512, -) -@click.option( - "--embedding-model", - type=str, - help="Embedding model (for vector type)", - default="all-MiniLM-L6-v2", -) -@click.option( - "--overlap-size", - type=int, - help="Overlap size in tokens (for vector type)", - default=64, -) -@click.pass_context -@handle_client_errors("register memory bank") -def register( - ctx, - memory_bank_id: str, - type: str, - provider_id: Optional[str], - provider_memory_bank_id: Optional[str], - chunk_size: Optional[int], - embedding_model: Optional[str], - overlap_size: Optional[int], -): - """Create a new memory bank""" - client = ctx.obj["client"] - - config = None - if type == "vector": - config = { - "memory_bank_type": "vector", - "chunk_size_in_tokens": chunk_size, - "embedding_model": embedding_model, - } - if overlap_size: - config["overlap_size_in_tokens"] = overlap_size - elif type == "keyvalue": - config = {"memory_bank_type": "keyvalue"} - elif type == "keyword": - config = {"memory_bank_type": "keyword"} - elif type == "graph": - config = {"memory_bank_type": "graph"} - - from rich import print as rprint - from rich.pretty import pprint - - rprint("\n[bold blue]Memory Bank Configuration:[/bold blue]") - pprint(config, expand_all=True) - - response = client.memory_banks.register( - memory_bank_id=memory_bank_id, - params=config, - provider_id=provider_id, - provider_memory_bank_id=provider_memory_bank_id, - ) - if response: - click.echo(yaml.dump(response.dict())) - - -@memory_banks.command() -@click.argument("memory-bank-id") -@click.pass_context -@handle_client_errors("delete memory bank") -def unregister(ctx, memory_bank_id: str): - """Delete a memory bank""" - client = ctx.obj["client"] - client.memory_banks.unregister(memory_bank_id=memory_bank_id) - click.echo(f"Memory bank '{memory_bank_id}' deleted successfully") - - -# Register subcommands -memory_banks.add_command(list) -memory_banks.add_command(register) -memory_banks.add_command(unregister) diff --git a/src/llama_stack_client/lib/cli/memory_banks/__init__.py b/src/llama_stack_client/lib/cli/vector_dbs/__init__.py similarity index 75% rename from src/llama_stack_client/lib/cli/memory_banks/__init__.py rename to src/llama_stack_client/lib/cli/vector_dbs/__init__.py index eb9a0bc4..62e1cd65 100644 --- a/src/llama_stack_client/lib/cli/memory_banks/__init__.py +++ b/src/llama_stack_client/lib/cli/vector_dbs/__init__.py @@ -4,6 +4,6 @@ # This source code is licensed under the terms described in the LICENSE file in # the root directory of this source tree. -from .memory_banks import memory_banks +from .vector_dbs import vector_dbs -__all__ = ["memory_banks"] +__all__ = ["vector_dbs"] diff --git a/src/llama_stack_client/lib/cli/vector_dbs/vector_dbs.py b/src/llama_stack_client/lib/cli/vector_dbs/vector_dbs.py new file mode 100644 index 00000000..b2c88acb --- /dev/null +++ b/src/llama_stack_client/lib/cli/vector_dbs/vector_dbs.py @@ -0,0 +1,115 @@ +# 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. + +from typing import Optional + +import click +import yaml +from rich.console import Console +from rich.table import Table + +from ..common.utils import handle_client_errors + + +@click.group() +def vector_dbs(): + """Query details about available vector dbs on distribution.""" + pass + + +@click.command("list") +@click.pass_context +@handle_client_errors("list vector dbs") +def list(ctx): + """Show available vector dbs on distribution endpoint""" + + client = ctx.obj["client"] + console = Console() + vector_dbs_list_response = client.vector_dbs.list() + + if vector_dbs_list_response: + table = Table() + # Add our specific columns + table.add_column("identifier") + table.add_column("provider_id") + table.add_column("provider_resource_id") + table.add_column("vector_db_type") + table.add_column("params") + + for item in vector_dbs_list_response: + # Create a dict of all attributes + item_dict = item.__dict__ + + # Extract our main columns + identifier = str(item_dict.pop("identifier", "")) + provider_id = str(item_dict.pop("provider_id", "")) + provider_resource_id = str(item_dict.pop("provider_resource_id", "")) + vector_db_type = str(item_dict.pop("vector_db_type", "")) + # Convert remaining attributes to YAML string for params column + params = yaml.dump(item_dict, default_flow_style=False) + + table.add_row( + identifier, provider_id, provider_resource_id, vector_db_type, params + ) + + console.print(table) + + +@vector_dbs.command() +@click.argument("vector-db-id") +@click.option("--provider-id", help="Provider ID for the vector db", default=None) +@click.option("--provider-vector-db-id", help="Provider's vector db ID", default=None) +@click.option( + "--embedding-model", + type=str, + help="Embedding model (for vector type)", + default="all-MiniLM-L6-v2", +) +@click.option( + "--embedding-dimension", + type=int, + help="Embedding dimension (for vector type)", + default=384, +) +@click.pass_context +@handle_client_errors("register vector db") +def register( + ctx, + vector_db_id: str, + provider_id: Optional[str], + provider_vector_db_id: Optional[str], + embedding_model: Optional[str], + embedding_dimension: Optional[int], +): + """Create a new vector db""" + client = ctx.obj["client"] + + response = client.vector_dbs.register( + vector_db_id=vector_db_id, + provider_id=provider_id, + provider_vector_db_id=provider_vector_db_id, + embedding_model=embedding_model, + embedding_dimension=embedding_dimension, + ) + if response: + click.echo(yaml.dump(response.dict())) + + +@vector_dbs.command() +@click.argument("vector-db-id") +@click.pass_context +@handle_client_errors("delete vector db") +def unregister(ctx, vector_db_id: str): + """Delete a vector db""" + client = ctx.obj["client"] + client.vector_dbs.unregister(vector_db_id=vector_db_id) + click.echo(f"Vector db '{vector_db_id}' deleted successfully") + + +# Register subcommands +vector_dbs.add_command(list) +vector_dbs.add_command(register) +vector_dbs.add_command(unregister) From b2fca3eda2879a1d8edda3f0bce9da918b1ee071 Mon Sep 17 00:00:00 2001 From: Dinesh Yeduguru Date: Thu, 23 Jan 2025 15:23:34 -0800 Subject: [PATCH 2/2] update the cli for 0.1.0 --- docs/cli_reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cli_reference.md b/docs/cli_reference.md index f9b7dd38..be6ab1ad 100644 --- a/docs/cli_reference.md +++ b/docs/cli_reference.md @@ -249,4 +249,4 @@ Options: #### `llama-stack-client toolgroups unregister` ```bash $ llama-stack-client toolgroups unregister -``` \ No newline at end of file +```