Custom and Local Providers#
This page covers Ollama, vLLM, and any other
OpenAI-compatible server — plus how to declare a reusable
[[providers]] block in your config so gptme can find them by name.
For the full list of built-in providers and API keys, see Providers.
Ollama (local)#
Ollama runs LLMs on your machine. gptme connects through Ollama’s OpenAI-compatible API.
Quick start:
# Install Ollama (https://ollama.com/download)
ollama pull llama3.2:3b
ollama serve
OPENAI_BASE_URL="http://127.0.0.1:11434/v1" gptme 'hello' -m local/llama3.2:3b
Persistent config (~/.config/gptme/config.toml):
[env]
OPENAI_BASE_URL = "http://127.0.0.1:11434/v1"
MODEL = "local/llama3.2:3b"
Or use a named provider entry (see Configuration below):
[[providers]]
name = "ollama"
base_url = "http://127.0.0.1:11434/v1"
default_model = "llama3.2:3b"
Then: gptme 'hello' -m ollama/llama3.2:3b
Model name format: The name after local/ (or ollama/) must match
ollama list exactly, including the :tag suffix.
ollama list
gptme 'hi' -m local/llama3.2:3b # correct
gptme 'hi' -m local/llama3.2 # wrong if the tag is 3b, not latest
Common errors:
Error |
Cause |
Fix |
|---|---|---|
Connection refused :11434 |
Ollama not running |
|
Unknown model X (warning) |
Model not in gptme’s known list |
Harmless; the model still works |
Tool use fails or loops |
Model too small for tool format |
Use 7B+ (e.g. |
Note
Models under ~7B parameters rarely follow gptme’s tool protocol reliably.
For agent-style work, prefer at least llama3.1:8b or mistral:7b-instruct.
vLLM and OpenAI-compatible servers#
Any server exposing /v1/chat/completions works with the local/ prefix or a
named [[providers]] entry.
Example (vLLM):
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--port 8000
OPENAI_BASE_URL="http://localhost:8000/v1" \
gptme 'hello' -m local/meta-llama/Llama-3.1-8B-Instruct
Or as a named provider entry:
[[providers]]
name = "vllm"
base_url = "http://localhost:8000/v1"
default_model = "meta-llama/Llama-3.1-8B-Instruct"
VLLM_API_KEY="none" # vLLM often needs no auth
gptme 'hello' -m vllm/meta-llama/Llama-3.1-8B-Instruct
Tokenizer in airgapped environments
gptme may fetch the OpenAI cl100k_base tokenizer to count tokens. Offline, that
can time out with errors mentioning openaipublic.blob.core.windows.net.
Pre-cache tiktoken once while online to avoid this:
pip install tiktoken
python3 -c "import tiktoken; tiktoken.get_encoding('cl100k_base')"
Note
Source installs newer than v0.31.0 gracefully fall back to a character-based estimate (~4 chars/token) when the download fails. PyPI releases do not yet include this fallback, so the pre-cache step is recommended regardless.
Configuration#
Add custom providers to ~/.config/gptme/config.toml:
[[providers]]
name = "vllm-local"
base_url = "http://localhost:8000/v1"
default_model = "meta-llama/Llama-3.1-8B"
[[providers]]
name = "azure-gpt4"
base_url = "https://my-azure-endpoint.openai.azure.com/openai/deployments"
api_key_env = "AZURE_API_KEY"
default_model = "gpt-4"
Configuration fields:
Field |
Required |
Description |
|---|---|---|
|
Yes |
Provider identifier used in model selection |
|
Yes |
Base URL for the OpenAI-compatible API |
|
No |
API key directly in config (not recommended) |
|
No |
Environment variable name containing the API key |
|
No |
Default model when only provider name is specified |
API key resolution order:
api_key = "key-here"(not recommended for security)api_key_env = "MY_API_KEY"${PROVIDER_NAME}_API_KEY(e.g.VLLM_API_KEYfor a provider namedvllm)
Listing configured providers:
gptme-util providers list
Setting a default model#
Environment variable:
export MODEL="local/llama3.2:3b"
gptme 'hello'
Global config (recommended — see Configuration):
[models]
default = "ollama/llama3.2:3b"
Project config (gptme.toml in the repo root):
[env]
MODEL = "local/llama3.2:3b"
Backward compatibility#
The existing local provider continues to work using the OPENAI_BASE_URL
and OPENAI_API_KEY environment variables. No changes are required for
existing configurations.