A local LLM setup can feel messy because several tools appear at once: Python environments, command-line utilities, model downloaders, model runtimes, chat interfaces, and APIs. The trick is to separate the toolchain into jobs.

For a beginner, four ideas are enough to get oriented: uv, uvx, Ollama, and model files.

Mental model: tools install things, runtimes run models

uv helps manage Python projects, Python versions, dependencies, and Python command-line tools. Ollama runs language models and exposes them through a local API. A model file contains the model weights and metadata that the runtime needs.

These are different jobs:

Tool or objectJob
uvManage Python projects, dependencies, Python versions, and tools
uvxRun a Python CLI tool in an isolated temporary environment
OllamaDownload, manage, run, and serve LLMs locally
Model fileThe actual model weights and configuration
Chat UI or coding agentThe application that sends prompts to the model

The Toolchain Divide

Click a tool to see its primary job

Python Management
uv / uvx
Dependencies & CLI Tools
← Integrates →
Local Models
Ollama
Runtime API
Model File
GGUF / Weights
The same local model might be used from a terminal, a web UI, a notebook, or an editor. The model is the engine. The surrounding tools decide how pleasant it is to use.

What uv is for

uv is a fast Python package and project manager from Astral. It can create and synchronize project environments, manage dependencies, install Python versions, and run commands inside a project environment.

If you are building scripts around local LLMs, uv helps avoid the old “which Python environment is this using?” problem. A project can declare dependencies in pyproject.toml, and uv run can execute commands in the project environment.

Official docs to verify while drafting:

What uvx is for

uvx is an alias for uv tool run. It runs a Python command-line tool in an isolated environment without permanently installing it into your project. Astral’s docs describe it as a convenience alias for running tools.

This is useful when you want to try a CLI once, inspect a package, or run a helper without polluting your project dependencies.

For example, conceptually:

uvx some-tool --help

The important difference:

Command patternBest for
uv run ...Running commands that need your project environment
uvx ...Running a standalone tool in an isolated disposable environment
uv tool install ...Installing a CLI you want available repeatedly on your PATH

Official docs to verify while drafting:

What Ollama is for

Ollama is a beginner-friendly local LLM runtime. It can download models, keep a local model library, run chat-style prompts, and expose an API. Ollama’s local API is served by default at:

http://localhost:11434/api

Ollama also documents OpenAI-compatible endpoints, including /v1/chat/completions, which matters because many LLM tools already know how to talk to OpenAI-style APIs. If a local runtime exposes a compatible API, you can often point existing clients at your local server by changing the base URL and model name.

Official docs to verify while drafting:

Model files are not all the same

When people say “download a model,” they may mean several different things:

FormCommon use
GGUFPopular with llama.cpp-based runtimes and many local desktop workflows
safetensorsCommon on Hugging Face for PyTorch/transformers-style workflows
Ollama model nameA runtime-managed reference such as gemma3 or qwen3
Provider model IDA hosted endpoint name such as an OpenRouter model slug

The model family name is not enough. You need the exact variant, file format, quantization, context support, license, and runtime compatibility.

Key papers on model distribution, inference runtimes, and software tooling

A beginner setup workflow

  1. Install one runtime first, such as Ollama.
  2. Run one small model and make sure it responds.
  3. Learn the local API address and model name.
  4. Add Python tooling only when you need scripts, evaluation, notebooks, or custom clients.
  5. Use uv for repeatable projects and uvx for one-off Python CLI tools.
  6. Record exact model names, versions, and commands in your notes.

What to verify because tools change

Do not copy install commands blindly from random posts. For any CLI, verify the official project page, package publisher, repository, release history, and install method. This matters especially for newer tools around local models, including model fit or model recommendation utilities.

The practical lesson is simple: use uv to keep Python sane, use uvx for disposable CLI experiments, use Ollama or another runtime to serve models, and keep model files conceptually separate from the apps that call them.