Coverage for .venv/lib/python3.13/site-packages/litellm/proxy/client/cli/commands/model_groups.py: 0%

34 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 12:01 +0000

1from collections.abc import Mapping 

2from typing import Final, Literal 

3 

4import click 

5import rich 

6import rich.table 

7 

8from ... import Client 

9from ._cli_context import cli_context_values 

10 

11 

12def create_client(ctx: click.Context) -> Client: 

13 context: Final = cli_context_values(ctx) 

14 return Client(base_url=context["base_url"], api_key=context["api_key"]) 

15 

16 

17def _rendered_field(group: Mapping[str, object], key: str, default: str) -> str: 

18 """The rendered value of one model group field, or ``default`` when the group omits it.""" 

19 return str(group.get(key, default)) 

20 

21 

22@click.group(name="model-groups") 

23def model_groups() -> None: 

24 """Inspect model groups your key can access on the proxy""" 

25 

26 

27@model_groups.command("list") 

28@click.option( 

29 "--format", 

30 "output_format", 

31 type=click.Choice(["table", "json"]), 

32 default="table", 

33 help="Output format (table or json)", 

34) 

35@click.pass_context 

36def list_model_groups(ctx: click.Context, output_format: Literal["table", "json"]) -> None: 

37 """List model groups accessible to your key, with mode and pricing""" 

38 client: Final = create_client(ctx) 

39 groups: Final = client.model_groups.info() 

40 if not isinstance(groups, list): 

41 raise click.ClickException( 

42 f"Unexpected response from /model_group/info: expected a list, got {type(groups).__name__}" 

43 ) 

44 

45 if output_format == "json": 

46 rich.print_json(data=groups) 

47 return 

48 

49 table: Final = rich.table.Table(title="Accessible Model Groups") 

50 table.add_column("Model", style="cyan") 

51 table.add_column("Mode", style="green") 

52 table.add_column("Input $/token", style="yellow") 

53 table.add_column("Output $/token", style="yellow") 

54 

55 for group in groups: 

56 table.add_row( 

57 _rendered_field(group, "model_group", ""), 

58 _rendered_field(group, "mode", "chat"), 

59 _rendered_field(group, "input_cost_per_token", ""), 

60 _rendered_field(group, "output_cost_per_token", ""), 

61 ) 

62 rich.print(table) 

63 

64 

65__all__ = ["model_groups"]