Pick a model
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). The model is Qwen2.5 0.5B Instruct, small enough to run on any machine in the 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.
clikart-cli list
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:
clikart-cli info Qwen/Qwen2.5-0.5B-Instruct
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):
clikart-cli info Qwen/Qwen2.5-0.5B-Instruct --dry
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 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:
clikart-cli Qwen/Qwen2.5-0.5B-Instruct --help
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 has the full exit contract).
Next: part 2, the weights arrive and the model speaks.