This is a fork of ollama/ollama
Everything below this banner is upstream's README, describing upstream's work. Ollama is theirs; this fork only adds to it, and tries to add as little as possible.
It tracks upstream releases and carries a narrow set of changes:
- Vision-model correctness. Image token budgets and native-aspect dynamic resolution for gemma4 and nemotron, and an fp32-accumulation gate for qwen2.5-vl that closes an fp16 overflow in the vision tower — a few elements in millions reach
infon CUDA and the caption collapses into a repeated glyph. Offered upstream as ollama#18070.- A vision regression suite. A preflight harness with recorded per-model expectations, generated (public, no-download) trigger images, and env-gated node-level instrumentation, run against every build before it deploys.
- Fixes carried until upstream takes them, each tracked against an upstream issue or PR, and deleted from here when it lands there — the retirement register lists every carried item, what retires it, and the test that gates its deletion.
- An experimental MLX runtime for Apple Silicon and CUDA — see the caveats below before using it for anything that matters.
Current fold:
v0.34.4-dynres— upstream v0.34.4, llama.cppb11081with compat patches 001 002 004 005 801 802 903 and 908 (908 is new in this fold), MLX59d600b5, XGrammar 0.2.7.mainmoves ahead of this between folds; the tag is the fixed point to build and roll back to. Deployed: the tag, stamped0.34.4-dynres-0-gb43ee8e. It went onto the CUDA host at 07:37 on 2026-09-28, onto the AMD/gfx1151 host at 07:39 (#391), and onto the Apple Silicon host's mlx-metal surface (:11435) at 14:07.
- Build: on the CUDA and gfx1151 hosts, the natively gated payload with the tag's Go binary. On the Apple Silicon host, both halves are built at the tag.
- think+format: all three hosts run the two-pass flow (
OLLAMA_FORMAT_TWO_PASS=1, ADR 0045; open item 7 of the fold record).- KV cache: all three set
OLLAMA_KV_CACHE_TYPE=f16explicitly (#387).- Drafting: the CUDA container and the Apple Silicon launchd agent also keep
OLLAMA_MLX_DRAFT_UNDER_GRAMMAR=0(ADR 0033).The matrix below is each host's preflight on its production server. On the Apple Silicon host, the tag replaced
0.34.0-maxusai-8a7ba949, which had served the mlx-metal surface on:11435since 2026-09-18. Before the swap, the tag's build passed preflight on a:11437stage, themlxrunnertests with vision golden parity, and a two-pass smoke. Both builds' binary and payload are archived for rollback (BINARIES.md).
Fork builds are stamped
<upstream-version>-dynres-<n>-g<sha>;dynresnames the change that started the fork, not the company that runs it. Fork-specific documentation, ADRs and measurements live indocs/maxusai/.
| surface | Build identity | M5 tensor path | Image size ladder | Pinned image budget | thinking on/off | Output quality | fp16 overflow canary | Runner isolation | measured on |
|---|---|---|---|---|---|---|---|---|---|
| cuda | green | n/a | green | green | green | not run | green | green | 0.34.4-dynres-0-gb43ee8e |
| mlx-cuda | not run | not run | not run | not run | not run | not run | not run | not run | — |
| mlx-metal | skipped | green | green | skipped | green | not run | skipped | green | 0.34.4-dynres-0-gb43ee8e |
| apple-silicon-mlx | not run | not run | not run | not run | not run | not run | not run | not run | — |
| rocm7 | green | n/a | green | green | green | green | green | green | 0.34.4-dynres-0-gb43ee8e |
| rocm10 | not run | not run | not run | not run | not run | not run | not run | not run | — |
| cpu | not run | not run | not run | not run | not run | not run | not run | not run | — |
Generated by release_matrix.py from recorded preflight runs. A surface with no run for this release reads not run — absence is shown, never assumed green. A group is reported at its weakest check, so one skipped probe does not read as a pass.
cuda, mlx-metal and rocm7 here are the deployed serving surfaces. apple-silicon-mlx is the
deprecated alias for mlx-metal and will disappear from the generator with it.
Measured against upstream ollama v0.34.4 at llama.cpp b11081. Every row is a
capability the fork has and upstream does not; the record column is where the
decision and its measurements live (docs/maxusai/). The
retirement register tracks when each one can go.
Vision correctness on the llama.cpp path — the deployed engine
| upstream ollama | this fork | record | |
|---|---|---|---|
| nemotron-3 vision | fixed 512×512 canvas — 256 tokens per image, whatever the aspect ratio. Upstream's MLX nemotron_h has been native-aspect since v0.34.3 |
native-aspect dynamic resolution, 256–3,328 tokens, position embeddings interpolated to the patch grid in-graph | patch 002, ADR 0001 |
| gemma4 image budget | default limits 70–1,120 tokens (40–280 before b10864); an under-budget image keeps its natural rounded grid and is letterbox-padded | every image scaled to fill the requested budget and snapped to gemma4's supported ladder (70/140/280/560/1120), never padded — off-ladder grids measurably break box_2d vertical grounding. The budget is a per-request option (image_min_tokens/image_max_tokens, defaults 70/1120) and the scheduler reloads when the resolved flags change. Upstream has since adopted the same default limits; the fill is still fork-only |
patch 004, ADR 0003/0008/0016 |
| qwen2.5-vl on CUDA | f16 vision matmuls accumulate in fp16; on some ordinary images a few elements of millions reach inf at v.blk.31.ffn_down and the caption collapses into one repeated glyph |
fp32 accumulation forced for every Qwen-VL runner (qwen2vl and qwen25vl, one family under two converter spellings), keyed on the GGUF architecture. Offered upstream as ollama#18070, still open |
llm/llama_server.go |
| MoE + MMQ on CUDA | MMQ reads its buffers in whole tiles, but pads them from the batch (get_J_max(ne12) since #29941, get_J_max(ne11) before), which rounds down while the launched tile rounds up. Before #29941, a broadcast ne11 == 1 gave no padding at all: an illegal memory access. Since, batches under 128 tokens can still read past the buffer |
every tile-read buffer (src1, ids_dst, NVFP4 scales) padded for the widest tile that has a config, as before llama.cpp #24127. Offered as llama.cpp#27044, which upstream closed for #29941 |
patch 903 |
| gemma4 flash attention on CUDA | b11081 retunes the MMA configs and tile sizes for head dims 256/512 (ce8caa6e6). Its accuracy is unchanged in llama.cpp's test-backend-ops, but the rounding moves. With ollama's Q4_K_M, gemma4:26b leaves 6 of 27 think-on cases in loops that never end, against 1 without it; with ggml-org's Q4_0, a case loops the other way |
the device half of ce8caa6e6 is reverted to b10969's tiling, which keeps the numerics production was gated on; the host half, the decode selection, stays upstream's. The revert shows no speed cost: in the paired runs on CUDA, gemma4:31b decoded 57 tok/s with either tiling, and gemma4:26b 176 tok/s against the new tiling's 137. On gfx1151 the patch changes no kernel |
patch 908, the v0.34.4 fold record |
Structured output and generation control
| upstream ollama | this fork | record | |
|---|---|---|---|
think + format in one request |
since v0.34.4, one pass: the grammar applies from the first token, after free thinking that ends at the parser's closing strings | the same by default. OLLAMA_FORMAT_TWO_PASS=1 keeps the fork's two-pass flow: pass one thinks without the grammar and stops at the think-close marker, and pass two answers under it. Production runs it, because on MLX it lets the thinking draft |
ADR 0045 (0002/0004/0010) |
| whitespace in structured output (MLX) | the JSON grammar allows an unlimited whitespace run between tokens, so a stalled decode can fill num_predict with indentation and never close the answer |
runs bounded at 32 characters per separator (max_whitespace_cnt on the json_schema element) |
ADR 0035 (proposed) |
| drafting under a grammar (MLX) | always on | on by default to match upstream; OLLAMA_MLX_DRAFT_UNDER_GRAMMAR=0 restores the gate, and production sets it |
ADR 0033 |
| stop sequences (MLX) | not honoured by the MLX runner | honoured, with a possible stop prefix held back until it matches or the stream ends | mlxrunner/stopper.go |
| KV cache type | one global OLLAMA_KV_CACHE_TYPE |
per model, with K/V pair syntax; production runs f16 on every platform, and a quantized cache is per model or per request | ADR 0005, ADR 0043 |
| llama-server's prompt cache | no --cache-ram, so llama.cpp's 8192 MiB host-RAM cache is on for every GGUF model |
the same by default. prompt_cache_ram, per model or per request, sets --cache-ram, and 0 turns it off: up to a fifth less time per image request on gemma4:31b, with the same answers. The vision harness sends 0 |
ADR 0047 |
What production's choices cost, against stock v0.34.4
- Two-pass think+format (
OLLAMA_FORMAT_TWO_PASS=1, which production sets):- A request prefills twice: pass two re-submits pass one's tokens.
num_predictbounds each pass, so the total can exceed it (8,290 against 8,192, measured).- It also handles a tool call after the thinking, and an end of turn inside it, differently. ADR 0045 tabulates both flows.
- On MLX the thinking runs as fast as a single pass that drafts under the grammar, as stock's does (level within
the spread, measured on the fork's build with drafting on). Production turns drafting under a grammar off
(
OLLAMA_MLX_DRAFT_UNDER_GRAMMAR=0), because it retains memory on the qwen3.5 family, and drafts in pass one, which has no grammar. - On GGUF neither flow drafts. The two flows leave the same cases unfinished, on all five models measured on gfx1151.
- The MLX runtime is slower than the llama.cpp engine on CUDA; see below.
- Patch 908 costs no speed (the table above), and an f16 KV cache is stock's default too.
Serving and scheduling
| upstream ollama | this fork | record | |
|---|---|---|---|
| MLX admission | weights against free device memory (and, since v0.34.1, a system-memory bound on integrated GPUs) | weights + KV priced at the requested num_ctx + a per-architecture headroom; an explicit rung that does not fit is refused, an automatic one is clamped |
ADR 0034 |
| MLX memory ceiling | none | OLLAMA_MLX_MEMORY_LIMIT and a cache limit, set per runner from the admitted budget |
runner knobs |
| nvfp4 global scales | stored in MLX's m × 2688 form and divided back out wherever a wrapper applies the scale itself (globalScaleFactor, ollama#18550). That is not the identity in float32: 17 of gemma4:31b's 191 vision scales move one ulp |
stored as the checkpoint's own multiplier m, with upstream's helpers defined in those terms, so every call site is exact |
ADR 0039 |
| model identity in a record | a tag | the manifest digest: the library re-published gemma4:*-nvfp4 with bf16 vision towers under unchanged tags and config blobs |
ADR 0038 (proposed) |
| gemma4 image chunk vs. generation batch (GGUF) | the batch follows num_ctx (1024 above 4096), so a top-rung gemma4 image (up to 1120 tokens) is decoded in two pieces, bidirectional only within each. The fix that fits an image chunk to one ubatch, llama.cpp#28954, is still open |
a gemma4 vision runner starts from the batch rung that holds its image ceiling (2048 at 1120) and steps down only when it does not fit | ADR 0036 |
| gemma4 on MLX | upstream's own vision and audio tower. Since v0.34.4 it picks each image's budget from the 70/140/280/560/1120 ladder, closest to the input resolution, with no API parameter (ollama#18603) | vision through the fork's pipeline on upstream's MediaModel, with the GGUF path's per-request budget (image_min_tokens/image_max_tokens, defaults 70/1120), filled and snapped to the ladder; audio not shipped |
ADR 0021 (0003/0008) |
| transparent images (gemma4 on MLX) | alpha dropped by RGB conversion before the resize, so the colour stored under a transparent pixel shows | composited over white before the resize, as mlx-vlm's convert_to_rgb does |
ADR 0015 |
| media prompts on MLX | chunk boundaries extended around non-causal spans (extendChunk, since v0.34.1) |
prefill chunks span-aligned around image blocks, the opening chunk included, with bidirectional expansions matched all-or-nothing; a late image is refused | ADR 0014 |
| scheduler | — | log sites never drop fields under contention; head-of-line and evict-all-wait fixes; attached media charged against capabilities before the load; capability advertising corrected for MLX architectures | server/sched.go, images.go |
| panic hygiene (MLX) | — | a cleanup that fails while a request is unwinding never replaces the panic that caused it | mlxrunner/unwind.go |
Measurement — nothing comparable upstream
| this fork | record | |
|---|---|---|
| vision regression suite | preflight with versioned per-model expectations, generated (public, no-download) trigger images, an env-gated node-level meter, and a generated release matrix — run before every deploy | ADR 0011/0012, patch 801 |
| campaigns | five report templates rendered only by generators; per-request memory and drafting analysis; bbox conformance scoped to image geometry | ADR 0012/0028/0030 |
| bounding-box protocol | requests pin norm-1000 and carry a self-calibrating anchor, so the model's internal resize cannot contaminate coordinates: 111 of 112 cells convert cleanly across 14 geometries × 4 models × 2 think modes. A protocol and its measurements, not a runtime change | ADR 0027/0030 |
| fork identity | builds stamped <upstream>-dynres-<n>-g<sha>, a tag per fold, release notes carrying the generated matrix |
ADR 0032 |
It works. Models load, stay resident and generate correct output on both Metal and CUDA. But it is not the path to reach for by default:
-
On CUDA it runs at 34–75% of the
cudapath's decode throughput, median 46%. Measured across four matched model pairs on one host, one server process — full report. "Roughly half" is a fair central estimate and a poor description of any single case: the spread is 2.2× and it is not architectural (the two dense pairs sit at 75% and 53%, the two MoE at 34% and 39%). Two of the fourmlx-cudaarms had no stable throughput to quote at all. The report is dated: it measured0.33.2-dynres-5-g2b95b4aon 2026-08-30. The MLX pin has moved since then, to59d600b5in v0.34.4, and the matched comparison has not been re-run. -
Its bigger cost is variance, not speed.
- Throughput.
mlx-cuda's per-request spread is ~5× thecudapath's and reaches 46% within a single arm — same host, same prompt, back to back — while everycudaarm held inside ±1.5% first time. It is per-model:gemma4:31b-nvfp4reproduced to 1.1% across four independent measurements. - Output. At temperature 0 a drafted request takes its own path every
time. Even undrafted, each cold load takes its own greedy trajectory. The
same gemma4:26b request finished 1 to 3 times in 5 cold loads, depending on
the prompt. On the
cudapath, the same request repeats byte for byte (v0.34.4 fold record: the drafting probe, and open item 8).
For anything that sets a timeout or compares two builds, this matters more than the ratio. Compare MLX builds with repeats, never single runs.
- Throughput.
-
Structured output with thinking depends on drafting. Such a request thinks 1.5–1.7× faster when its thinking drafts. Production runs the two-pass flow, which lets it draft (ADR 0045).
-
Two traps, both measured:
- Pin
num_ctx. Unset, the default is derived from total VRAM: 262144 on the CUDA host's 105.5 GiB. That collapses decode 25×, to 1.48 tok/s against 37.97 at 8192 (record). - Persist the kernel cache. Without
MLX_PTX_CACHE_DIR, every fresh container recompiles MLX's JIT kernels, so its first request takes 10–15 minutes. Keep one cache directory per GPU architecture (vision-suite README).
- Pin
-
On Metal it is the other way round. A matched campaign measured MLX ~2.4× faster than llama-server (gemma4 12b: 121 vs 50 tok/s decode; 2026-08-08, single samples, directional only). So the CUDA gap is CUDA-specific, not an MLX property — do not generalise either number to the other platform.
-
Engine and quantization move together in every figure above — nvfp4 on MLX against q4_K_M on GGUF, because those are the artefacts that exist. So the throughput numbers describe the two stacks as shipped, not the engine in isolation, and the same confound makes MLX-vs-GGUF quality an uncontrolled comparison: a quality difference cannot be attributed to the engine either. Nobody has separated them; until someone does, treat "which is better" as open.
-
It is converging with upstream's own MLX work, and is expected to be superseded by it.
- The fork has retired its constrained-sampling layer in favour of upstream's engine (ADR 0033).
- Since v0.34.4 it follows upstream's single-pass structured outputs by default (ADR 0045).
- What remains fork-only on MLX is in the tables above.
Use GGML/llama-server for anything where throughput or comparability matters.
Every row in the tables above is a delta we would rather not have. Each is
offered upstream where it is upstream's to take, and deleted from here once it
lands there. The Qwen-VL accumulation gate
(ollama#18070) is filed and pending.
Upstream closed the MMQ padding fix (llama.cpp#27044)
for its narrower #29941, which still reads past the
buffer below 128 tokens. 903 now carries the widest-tile padding that a successor would offer. The gemma4 tiling revert (908) is not upstream's to take:
ce8caa6e6 loses no precision in llama.cpp's test-backend-ops, so the revert is the fork's own
choice to keep production's gated numerics.
Start building with open models.
curl -fsSL https://ollama.com/install.sh | shirm https://ollama.com/install.ps1 | iexcurl -fsSL https://ollama.com/install.sh | shThe official Ollama Docker image ollama/ollama is available on Docker Hub.
ollama
You'll be prompted to run a model or connect Ollama to your existing agents or applications such as Claude Code, OpenClaw, OpenCode , Codex, Copilot, and more.
To launch a specific integration:
ollama launch claude
Supported integrations include Claude Code, Codex, Copilot CLI, DeepSeek Harness, Droid, and OpenCode.
Use OpenClaw to turn Ollama into a personal AI assistant across WhatsApp, Telegram, Slack, Discord, and more:
ollama launch openclaw
Run and chat with Gemma 4:
ollama run gemma4
See ollama.com/library for the full list.
See the quickstart guide for more details.
Ollama has a REST API for running and managing models.
curl http://localhost:11434/api/chat -d '{
"model": "gemma4",
"messages": [{
"role": "user",
"content": "Why is the sky blue?"
}],
"stream": false
}'
See the API documentation for all endpoints.
pip install ollama
from ollama import chat
response = chat(model='gemma4', messages=[
{
'role': 'user',
'content': 'Why is the sky blue?',
},
])
print(response.message.content)npm i ollama
import ollama from "ollama";
const response = await ollama.chat({
model: "gemma4",
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
console.log(response.message.content);- llama.cpp project founded by Georgi Gerganov.
Want to add your project? Open a pull request.
- Open WebUI - Extensible, self-hosted AI interface
- Onyx - Connected AI workspace
- LibreChat - Enhanced ChatGPT clone with multi-provider support
- Lobe Chat - Modern chat framework with plugin ecosystem (docs)
- NextChat - Cross-platform ChatGPT UI (docs)
- Perplexica - AI-powered search engine, open-source Perplexity alternative
- big-AGI - AI suite for professionals
- Lollms WebUI - Multi-model web interface
- ChatOllama - Chatbot with knowledge bases
- Bionic GPT - On-premise AI platform
- Chatbot UI - ChatGPT-style web interface
- Hollama - Minimal web interface
- Chatbox - Desktop and web AI client
- chat - Chat web app for teams
- Ollama RAG Chatbot - Chat with multiple PDFs using RAG
- Tkinter-based client - Python desktop client
- Dify.AI - LLM app development platform
- AnythingLLM - All-in-one AI app for Mac, Windows, and Linux
- Maid - Cross-platform mobile and desktop client
- Witsy - AI desktop app for Mac, Windows, and Linux
- Cherry Studio - Multi-provider desktop client
- Ollama App - Multi-platform client for desktop and mobile
- PyGPT - AI desktop assistant for Linux, Windows, and Mac
- Alpaca - GTK4 client for Linux and macOS
- SwiftChat - Cross-platform including iOS, Android, and Apple Vision Pro
- Enchanted - Native macOS and iOS client
- RWKV-Runner - Multi-model desktop runner
- Ollama Grid Search - Evaluate and compare models
- macai - macOS client for Ollama and ChatGPT
- AI Studio - Multi-provider desktop IDE
- Reins - Parameter tuning and reasoning model support
- ConfiChat - Privacy-focused with optional encryption
- LLocal.in - Electron desktop client
- MindMac - AI chat client for Mac
- Msty - Multi-model desktop client
- BoltAI for Mac - AI chat client for Mac
- IntelliBar - AI-powered assistant for macOS
- Kerlig AI - AI writing assistant for macOS
- Hillnote - Markdown-first AI workspace
- Perfect Memory AI - Productivity AI personalized by screen and meeting history
- Ollama Android Chat - One-click Ollama on Android
SwiftChat, Enchanted, Maid, Ollama App, Reins, and ConfiChat listed above also support mobile platforms.
- Cline - VS Code extension for multi-file/whole-repo coding
- Continue - Open-source AI code assistant for any IDE
- Void - Open source AI code editor, Cursor alternative
- Copilot for Obsidian - AI assistant for Obsidian
- twinny - Copilot and Copilot chat alternative
- gptel Emacs client - LLM client for Emacs
- Ollama Copilot - Use Ollama as GitHub Copilot
- Obsidian Local GPT - Local AI for Obsidian
- Ellama Emacs client - LLM tool for Emacs
- orbiton - Config-free text editor with Ollama tab completion
- AI ST Completion - Sublime Text 4 AI assistant
- VT Code - Rust-based terminal coding agent with Tree-sitter
- QodeAssist - AI coding assistant for Qt Creator
- AI Toolkit for VS Code - Microsoft-official VS Code extension
- Open Interpreter - Natural language interface for computers
- LiteLLM - Unified API for 100+ LLM providers
- Semantic Kernel - Microsoft AI orchestration SDK
- LangChain4j - Java LangChain (example)
- LangChainGo - Go LangChain (example)
- Spring AI - Spring framework AI support (docs)
- LangChain and LangChain.js with example
- Ollama for Ruby - Ruby LLM library
- any-llm - Unified LLM interface by Mozilla
- OllamaSharp for .NET - .NET SDK
- LangChainRust - Rust LangChain (example)
- Agents-Flex for Java - Java agent framework (example)
- Elixir LangChain - Elixir LangChain
- Ollama-rs for Rust - Rust SDK
- LangChain for .NET - .NET LangChain (example)
- chromem-go - Go vector database with Ollama embeddings (example)
- LangChainDart - Dart LangChain
- LlmTornado - Unified C# interface for multiple inference APIs
- Ollama4j for Java - Java SDK
- Ollama for Laravel - Laravel integration
- Ollama for Swift - Swift SDK
- LlamaIndex and LlamaIndexTS - Data framework for LLM apps
- Haystack - AI pipeline framework
- Firebase Genkit - Google AI framework
- Ollama-hpp for C++ - C++ SDK
- PromptingTools.jl - Julia LLM toolkit (example)
- Ollama for R - rollama - R SDK
- Portkey - AI gateway
- Testcontainers - Container-based testing
- LLPhant - PHP AI framework
- AutoGPT - Autonomous AI agent platform
- crewAI - Multi-agent orchestration framework
- Strands Agents - Model-driven agent building by AWS
- Cheshire Cat - AI assistant framework
- any-agent - Unified agent framework interface by Mozilla
- Stakpak - Open source DevOps agent
- Hexabot - Conversational AI builder
- Neuro SAN - Multi-agent orchestration (docs)
- RAGFlow - RAG engine based on deep document understanding
- R2R - Open-source RAG engine
- MaxKB - Ready-to-use RAG chatbot
- Minima - On-premises or fully local RAG
- Chipper - AI interface with Haystack RAG
- ARGO - RAG and deep research on Mac/Windows/Linux
- Archyve - RAG-enabling document library
- Casibase - AI knowledge base with RAG and SSO
- BrainSoup - Native client with RAG and multi-agent automation
- LangBot - Multi-platform messaging bots with agents and RAG
- AstrBot - Multi-platform chatbot with RAG and plugins
- Discord-Ollama Chat Bot - TypeScript Discord bot
- Ollama Telegram Bot - Telegram bot
- LLM Telegram Bot - Telegram bot for roleplay
- aichat - All-in-one LLM CLI with Shell Assistant, RAG, and AI tools
- oterm - Terminal client for Ollama
- gollama - Go-based model manager for Ollama
- tlm - Local shell copilot
- tenere - TUI for LLMs
- ParLlama - TUI for Ollama
- llm-ollama - Plugin for Datasette's LLM CLI
- ShellOracle - Shell command suggestions
- LLM-X - Progressive web app for LLMs
- cmdh - Natural language to shell commands
- VT - Minimal multimodal AI chat app
- AppFlowy - AI collaborative workspace, self-hostable Notion alternative
- Screenpipe - 24/7 screen and mic recording with AI-powered search
- Vibe - Transcribe and analyze meetings
- Page Assist - Chrome extension for AI-powered browsing
- NativeMind - Private, on-device browser AI assistant
- Ollama Fortress - Security proxy for Ollama
- 1Panel - Web-based Linux server management
- Writeopia - Text editor with Ollama integration
- QA-Pilot - GitHub code repository understanding
- Raycast extension - Ollama in Raycast
- Painting Droid - Painting app with AI integrations
- Serene Pub - AI roleplaying app
- Mayan EDMS - Document management with Ollama workflows
- TagSpaces - File management with AI tagging
- Opik - Debug, evaluate, and monitor LLM applications
- OpenLIT - OpenTelemetry-native monitoring for Ollama and GPUs
- Lunary - LLM observability with analytics and PII masking
- Langfuse - Open source LLM observability
- HoneyHive - AI observability and evaluation for agents
- MLflow Tracing - Open source LLM observability
- pgai - PostgreSQL as a vector database (guide)
- MindsDB - Connect Ollama with 200+ data platforms
- chromem-go - Embeddable vector database for Go (example)
- Kangaroo - AI-powered SQL client
- Google Cloud
- Fly.io
- Koyeb
- Harbor - Containerized LLM toolkit with Ollama as default backend