---
title: Pick a model
sidebar_label: 1. Pick a model
description: "Read the catalog, resolve a model's identity, and see what a download would cost, all before any weights move."
---

This tutorial takes one model from the catalog to a served endpoint in four parts, each a complete session, and ends with the same model running inside a C++ program. Core concepts are explained where they first appear. This part picks the model and learns everything about it without downloading a single weight.

It assumes the install directory exists and `clikart-cli` is on your `PATH` (see [Quick install](../installation.md)). The model is Qwen2.5 0.5B Instruct, small enough to run on any machine in the [system requirements](/clikart/system-requirements); every command works the same with any other model in the catalog.

## The catalog knows the families

`list` prints every registered model family: its modalities, the commands it provides, and whether it is runnable on this build. No network is involved; the catalog is compiled into the `clikart-cli` executable.

```bash
clikart-cli list
```

```text
registered model families (47)

bert  runnable
  *   Input Modalities: text
  *  Output Modalities: embedding
  *       Valid Combos: text -> embedding
  *        Model Types: bert
  *           Commands: embed, similar, bench, serve
  *             Web UI: generic page
  *             Vendor: Google
  *       License page: https://github.com/google-research/bert/blob/master/LICENSE
------------------------------------------
...
```

A family is the model architecture Modelverse knows how to run; a model you fetch is a checkpoint of that family. The `Commands` row is the contract for parts 2 and 3: whatever it lists is what that model can do.

## A source names a model

Everything model-specific starts from a source: a Hugging Face Hub repo id (`<org>/<repo>`), a pasted Hugging Face URL, or a local directory. Modelverse runs checkpoints in the formats model publishers ship on the Hub: safetensors, torch containers (`pytorch_model.bin`), and GGUF. (ONNX exports are a different lane: the ClikaRT runtime runs ONNX models directly; its how-to guide covers that path.) `info` resolves a source's identity:

```bash
clikart-cli info Qwen/Qwen2.5-0.5B-Instruct
```

```text
Qwen/Qwen2.5-0.5B-Instruct
  family=qwen  model_type=qwen2  architecture=Qwen2ForCausalLM
  variant: dense
  components: tokenizer=yes image=no audio=no video=no
  license page: https://github.com/QwenLM/Qwen/blob/main/Tongyi%20Qianwen%20LICENSE%20AGREEMENT
  model: Qwen/Qwen2.5-0.5B-Instruct  provider: Qwen  source: https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct
license: apache-2.0  https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/blob/main/LICENSE
```

Identity resolution reads configuration files only. `clikart-cli` downloads a few KB of JSON, matches it against the registered families, and reports what it found; weights do not move. This is deliberate: you can interrogate a 70B model from a laptop. The last three lines are the licensing report: the family's license page, the checkpoint's provider and source, and the checkpoint's own license with whether the repository is gated. Read them before you ship what the model produces.

## `--dry` shows what a fetch would cost

Add `--dry` and `info` also lists the files a fetch downloads, with sizes, split into companions (configs, tokenizer) and weights, and says how much of the repository it leaves behind (other weight formats, files the fetch never takes):

```bash
clikart-cli info Qwen/Qwen2.5-0.5B-Instruct --dry
```

```text
Qwen/Qwen2.5-0.5B-Instruct
  family=qwen  model_type=qwen2  architecture=Qwen2ForCausalLM
  variant: dense
  components: tokenizer=yes image=no audio=no video=no
  license page: https://github.com/QwenLM/Qwen/blob/main/Tongyi%20Qianwen%20LICENSE%20AGREEMENT
  model: Qwen/Qwen2.5-0.5B-Instruct  provider: Qwen  source: https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct
license: apache-2.0  https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/blob/main/LICENSE
  companions:
    config.json                                           659 B
    generation_config.json                                242 B
    merges.txt                                          1.6 MiB
    tokenizer.json                                      6.7 MiB
    tokenizer_config.json                               7.1 KiB
    vocab.json                                          2.6 MiB
  weights:
    model.safetensors                                   942 MiB
  total: 953 MiB  (weights 942 MiB, 7 files)
  repository: 953 MiB in 10 files; the rest is not fetched (other weight formats, files the fetch never takes)
  (dry; nothing downloaded)
```

Nothing here is Qwen-specific. `info google/gemma-4-E2B-it` reports `variant: dense + multimodal`; `info openai/whisper-large-v3-turbo` reports an audio component. Some repos ship several weight options to choose between; [Run a specific GGUF quantization](../../how-to/run-a-gguf-quantization.md) covers picking one.

## The model's own commands

`clikart-cli` has four commands that work without naming a model (`list`, `devices`, `info` and `fetch`; `generate-template`, their file-form helper, rides beside them). Every other command runs on a model you name: pass the source and `--help`, and `clikart-cli` resolves its family and prints that family's own command surface:

```bash
clikart-cli Qwen/Qwen2.5-0.5B-Instruct --help
```

```text
Qwen/Qwen2.5-0.5B-Instruct
  family=qwen  text->text

usage: clikart-cli Qwen/Qwen2.5-0.5B-Instruct [options] <command>

commands the 'qwen' family provides for this model

options:
  -h, --help     show this help and exit
  --verbose, -v  debug diagnostics (the effective-options report)
  --quiet, -q    warnings and errors only
  --no-color     plain output (also honored: $NO_COLOR, TERM=dumb, non-tty)

commands:
  prompt         one templated generation of the positional user message
  serve          run the http server (OpenAI and Anthropic APIs)
  bench          the family-owned benchmark flow
  mm_bench       the multi-modality benchmark flow (media axes over the serving
                 path)
```

Asking a model for a command its family does not provide refuses precisely and names what it does provide, with exit code 3 ([Script clikart-cli](../../how-to/script-the-cli.md) has the full exit contract).

Next: [part 2](02-fetch-and-prompt.md), the weights arrive and the model speaks.
