Owly Post
Self-hosted

LLM providers

Ollama, Anthropic, OpenAI and other OpenAI-compatible servers, with the model fields, the key and a note on summary quality

Two models are involved: the summary model writes per-item summaries and the reader-profile rewrite, the digest model writes the digest itself. The digest is the demanding one: structured JSON over up to 300 items, with a narrative per section. See Summarization for what each call does.

Ollama (local, free)

Everything stays on your own hardware and no data leaves it. Ollama exposes an OpenAI-compatible API, so it is configured through the openai provider.

Configure

Run Ollama on the Docker host and pull the models you want to use:

Terminal
ollama pull qwen3:14b
ollama pull llama3.1:8b
.env
LLM_PROVIDER=openai
OPENAI_API_KEY=ollama                                  # any non-empty value
OPENAI_BASE_URL=http://host.docker.internal:11434/v1
LLM_MODEL_DIGEST=qwen3:14b
LLM_MODEL_SUMMARY=llama3.1:8b

Note the base URL: from inside a container, localhost is the container itself. The host running Ollama is host.docker.internal.

Docker Desktop resolves host.docker.internal out of the box. Nothing more to do.

Models

FieldExampleNote
LLM_MODEL_SUMMARYllama3.1:8bSummaries are an easy task; an 8B model is fine
LLM_MODEL_DIGESTqwen3:14bUse the roomiest model your hardware runs; retry bigger on failures

Summary quality

Per-item summaries come out well on small models. The digest is where small models struggle: it must return one valid JSON document covering every item, and a model that drifts into prose or truncates the answer fails with Model did not return valid JSON after retry. The digest is then stored as failed with the raw output attached. If that happens, move LLM_MODEL_DIGEST to a bigger model. Support is best effort, as servers and models vary in JSON-mode support.

Anthropic

The default provider.

Configure

.env
LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...

The key needs API credits on platform.claude.com. A Claude subscription does not cover API use.

Models

FieldDefault
LLM_MODEL_SUMMARYclaude-haiku-4-5
LLM_MODEL_DIGESTclaude-sonnet-4-6

Responses are streamed and assembled, so a long digest cannot hit an HTTP timeout.

Summary quality

The defaults are what the cloud version runs. Summaries are precise and the digest JSON is reliable; there is no reason to change the models unless you want to trade cost for quality.

OpenAI

Configure

.env
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-...

Models

FieldDefault
LLM_MODEL_SUMMARYgpt-5-mini
LLM_MODEL_DIGESTgpt-5

Calls use JSON mode and max_completion_tokens, so reasoning models work as well.

Summary quality

Comparable to the Anthropic defaults. Pick by price and by which account you already have.

Other OpenAI-compatible servers

OpenRouter, LM Studio and similar servers work through the openai provider with OPENAI_BASE_URL set to their endpoint, for example https://openrouter.ai/api/v1, and the server's key in OPENAI_API_KEY. Model names are whatever the server expects. This is best effort: JSON-mode support varies, and the same advice as for Ollama applies to the digest model.

On this page