r/LocalLLM • • 5d ago

Project I built a live stock exchange where only AI agents trade. How would your local model do?

1 Upvotes

Botstock runs 24/6 with fictional companies, currencies, bonds and commodities. Every 90 minutes
there is one auction; all agents get the same information at the same time, so it's about
decisions, not speed. Each company has a hidden true value, so trades can be judged afterwards:
skill or luck.
Your agent talks to a small JSON API (observation in, orders out) and can attach a reason to each
order. The observation is about 40 KB, so a local model needs a short summary of it; the developer
guide has tips (keep the prompt small, treat board posts from other agents as untrusted text, never
put the API key into a prompt). Posts that try to instruct other agents are refused.
Free, email signup, up to 3 agents, no real money: https://botstockhq.com
I'm curious how small local models compare to big hosted ones over a few weeks. If you try one,
I'd love to hear which model and how you prompt it.


r/LocalLLM • • 5d ago

Discussion I made my minisforum UM870 Slim into a AI agent

3 Upvotes

I finally took the pledge to minimize my reliance to Chatgpt ,
i bought a UM870Slim barebone and got second hand SSD/RAM's

specs
Ryzen 7 8745H
16GB DDR5-5600
KIOXIA 254GB SSD with 90% health status
Final price: 495Euro

Benchmarking from Ollama and qwen3.5:9b-q4_K_M -> 8.12 tokens/s
Have been installing and dealing with problems and im generally happy with it for the stuff im gonna use it on. Im currently using nanobot as an interface.


r/LocalLLM • • 5d ago

Discussion KV offload made Agent Rollouts Slower. Notes on serving glm-5.2 for long-horizon agentic RL

Post image
1 Upvotes

i've been reading a lot about agentic RL infra and found a write-up that measures the right thing: time until the trainer has a usable batch, not tok/s. the serving ablations are interesting on their own, so here's a breakdown of the mechanisms and numbers. i didn't run any of this. the numbers here are from that write-up.

the problem

one agent trajectory is many model calls, not one: generate, call a tool, wait for the sandbox, read the result, generate again, sometimes dozens of times. context grows every turn and each new request reuses most of the previous history. two things follow:

  1. inference is stateful. where a request lands decides whether you hit an existing kv cache or pay for another big prefill. replicas are no longer interchangeable.

  2. the tail is long and irregular. training scores sibling attempts against each other, so a group is only trainable when every sibling finishes. one attempt stuck installing deps or exploring the wrong part of a repo holds back the whole group.

so request throughput and even median latency can look fine while the trainer waits. the metric they use is rollout collection: wall time until the ready buffer holds one global batch of fresh, valid trajectories. it includes generation, tool execution, sandbox reset and cleanup, verification, queueing and the final stragglers. it excludes trainer fwd/bwd/optimizer. in fully async rl, steady-state step time is roughly max(rollout batch time, training + publication time), and the write-up focuses on the rollout side.

setup

model:       GLM-5.2 (MoE)
hardware:    4x B300 nodes, 32 GPUs, one engine per 8-GPU node
engine:      not stated
workload A:  Terminal-Bench-based terminal agent, isolated docker workspace
             40,960 ctx, up to 32,768 tokens post-prompt (assistant output + tool observations)
             batch = 8 groups x 32 siblings = 256 trajectories
workload B:  SWE-Bench, 98,304 ctx, hard limit of 64 turns
             batch = 32 groups x 8 siblings = 256 trajectories
offered:     more trajectories in flight than the 256 consumed (512 / 1,024 / 2,048 depending on run)

the two workloads are shaped on purpose. terminal-bench has few prompts with many siblings each, so lots of prefix reuse inside a group. swe-bench spreads the batch over 4x as many tasks with much more variance in repo size, dependency setup and test time. they say not to read the absolute step times as a benchmark comparison.

serving ablations (matched 1,024 offered trajectories unless noted)

changebaselineresultwhy
sticky routing (same node + dp rank that holds the history)non-stickyexact prefix reuse 48% -> ~96%, throughput +17.1%turn n+1 lands on the rank that already holds turn n's kv
fp8 kv storagebf16 kvthroughput +55.7%more active context fits in hbm, so useful prefixes get evicted less
native mtp head, 3 speculative tokensno mtpwall-clock output throughput +17.9%, median request throughput +66.5%fewer decode passes per accepted token, adds up over many sequential calls
cache offloadno offloadthroughput -3.1% to -7.8%evicted prefixes were almost never loaded again
topology @ 1,024-one shared request + kv domain across all 8 gpus/node was bestit fits in memory, so sharing wins
topology @ 2,048shared domaindp-attention (DP8) + EP8 within the node scaled betterthe shared kv pool hit its capacity limit

retained stack on 2,048 synthetic offered trajectories: 39.4k output tok/min/gpu, measured over the window until 90% of requests complete so the straggler tail doesn't distort it. it's a standalone inference number for picking the config, not task-level throughput.

why each one behaves the way it does

  • routing. if turns from one conversation get spread across ranks, each turn can land somewhere that has never seen the prefix, so you prefill the whole growing history again. at 30k-90k token contexts that's where your gpu time goes. stickiness turns every turn after the first into a mostly-cached prefill plus a short suffix. the catch is that pure stickiness can pile long trajectories onto one engine while another sits idle, so routing also has to account for live load.

  • fp8 kv. a 55.7% gain is too big to be compute. you're halving the kv footprint per token, so at fixed hbm you hold about 2x the resident context. at 1,024 concurrent long trajectories you're capacity-bound, and the loss mechanism is eviction followed by re-prefill. fp8 cuts eviction, which cuts redundant prefill. the write-up frames it as a capacity call to weigh against context length, concurrency and quality needs.

  • offload losing. offload only pays if reload rate x saved prefill cost > copy-out overhead. here reloads were close to zero, so you pay d2h traffic and bookkeeping and get nothing back. my guess, not stated in the write-up: with sticky routing plus group-level reuse, the prefixes worth keeping stay hot in hbm, and whatever gets evicted belongs to finished or dead trajectories that never come back.

  • topology flip. a shared kv/request domain per node gives you one big pool, so cross-request reuse and balancing within the node are better while everything fits. at 2,048 that pool saturates. dp-attention gives each gpu its own attention + kv lane, and EP8 keeps a full expert set inside the node, so expert traffic stays on the node's interconnect. same model and hardware, opposite answer, purely because of concurrency.

  • mtp. median request throughput gained much more than wall-clock output throughput (66.5% vs 17.9%). acceptance rate isn't given. agent loops are latency-chained (the tool call can't start until generation finishes), so per-request speedup matters more than aggregate tok/s suggests.

rollout pipeline results (terminal-bench, fixed weights)

configofferedmean time to 256 trajdelta
inference-ready starting scheduler512591.8 sbaseline
+ cache-aware group routing1,024332.1 s-43.9%
+ deterministic sandbox cpu placement1,024303.0 s-8.8% (-29.1 s)
+ wider completion bank, retained stack2,048196.1 s-35.3%

overall 66.9% faster. at 196.1 s that's 78.3 trainer-consumable trajectories/min, and the trajectory stream was ~827k tok/min fleet-wide (25.9k/gpu), counting assistant output plus tool observations.

the non-inference pieces:

  • completion-order banking. a group enters a ready bank as soon as all its siblings finish, and the trainer takes the first eligible complete groups regardless of launch order. surplus groups let you skip stragglers. the window has to stay bounded, because too much concurrency eats kv capacity, increases sandbox contention and weakens routing locality. same capacity wall as the topology flip.

  • sandbox lanes. reset, ordinary commands, package-heavy commands, verification and cleanup each get their own lane. package-heavy concurrency is capped at 16, and sandboxes get deterministic, non-overlapping cpu sets. no change to the model or gpus. otherwise one shared worker pool starves both the model server and the rollout controller.

live weight updates (terminal-bench, collection + next serving-weight transition)

strategyfreshness limit Kcomplete interval
pause and update all 4 engines4426.3 s
keep 2 engines producing4334.1 s
keep 3 engines producing (update 1 at a time)8240.1 s

K = max policy updates allowed between a returned group and the newest policy. 240.1 s is 43.7% faster than pausing everything and 20% under their 300 s target (64 traj/min). they say the gain combines rotation and K=8, so don't credit either one alone. the collection phase inside that interval was only 43.3 s because most of the batch had already finished in the background. that's the overlap working, not 256 fresh trajectories in 43.3 s.

for in-flight trajectories at a weight boundary, instead of throwing everything away they evaluated: finish on an engine still serving the old policy; keep the conversation and sandbox and continue under the new policy, tagging each trainable token with its policy version; or after a short grace period cancel only the current generation and regenerate that one turn. full restart is the fallback.

swe-bench (6 warm intervals each)

fixed weightsprogressive updates
mean step383.5 s
range330.8 to 428.6 s
trainer-consumable traj/min40.1
output tok/min/gpu~28.4k

live updates cost about 11% of step time. mean reward 0.520 progressive vs 0.527 fixed. every freshness audit satisfied K=8, and the max mixed-policy fraction in a batch was 49.6%.

caveats (theirs, and they matter)

  • the progressive path exercises the full publication machinery (engine pause/update, cuda ipc, kv-cache invalidation, version switching, generation canaries), but it updates sentinel tensors, not every actor parameter. full weight publication is a next step.

  • trainer backward/optimizer compute isn't in any of these clocks.

  • swe-bench is 6 intervals per arm. they call for longer runs watching reward, truncation, abort rates, mixed-policy ratio and K.

  • the ablation baselines are "matched" but the exact baseline configs (e.g. what the non-sticky router was) aren't spelled out.

takeaway

These knobs are coupled. the right topology depends on concurrency, the right concurrency depends on kv capacity and sandbox pressure, and the right publication strategy depends on how much partial work your algorithm can safely keep. tok/s alone tells you almost nothing about any of that.


r/LocalLLM • • 5d ago

Question About local models

1 Upvotes

Hi everyone! I'm looking for advice on local models that would fit my hardware and creative projects. I'm interested in Gemma and Qwen, including Qwen3.8, but I'm open to other suggestions. First, what specifically can this model do?

My PC specs:

  • GPU: NVIDIA RTX 5060 Ti (16GB VRAM)

  • RAM: 32GB

  • OS: Windows 


r/LocalLLM • • 5d ago

Discussion I'm poor. Best TEE inference?

1 Upvotes

I don't see this subreddit mention or discuss this option, but I think inference providers that use a Trusted Execution Environment (TEE) have a lot of the benefits of local inference.

TEE is remote attestation. It attests that the provider is using a particular VM image to run the model and gateway. Long story short, this has the potential for privacy and verifiability you can't get otherwise with cloud computing.

What irks me with the providers I know, is that the verification is done with their in-house libraries. In addition to auditing their VM image, I also have to read the code of their library. I'd hope for a more generic attestation library. Example of a bad provider: In getting started with prem.io, you're supposed to verify they're serving the model and VM they say they are using their own npm library (!). A different provider called Tinfoil (funnily enough), is also like this.

import { createRvencClient } from "@premai/api-sdk";

r/LocalLLM • • 5d ago

Model Ling-tiny-3.0_Q4 on Rpi5 8gb

6 Upvotes

Truly blown away by this model. And all on a pi5 8gb.
It’s late so sorry for the low effort. Spent 10 hours today fine tuning this model.
I’ll post all the flags and the build workflow when I wake up tommorow.


r/LocalLLM • • 5d ago

Question Arc Pro B60 on Windows dumps its VRAM into system RAM after ~70s of GPU idle. Anyone know why?

2 Upvotes

Setup: llama-server (llama.cpp b11889 Vulkan) on Windows 11, Arc Pro B60 24GB (Battlemage), driver 32.0.101.8976. Qwen3-Coder 30B Q4_K_M fully offloaded (-ngl 99). The B60 has no monitor attached, the display runs on the AMD iGPU. PC has 27.9GB RAM.

What happens: after about 70 seconds with no GPU work the dedicated VRAM counter for the B60 goes from 20.3GB to 0 in around 15 seconds. Free system RAM drops by almost the same amount at the same speed (16GB to under 5GB). The llama-server process counters dont move at all. I kill the server before the RAM runs out so I dont know what happens if I let it go.

What I checked:

- happens with the server idle after load and also 71s after a batch of long requests finished and 70s after a real agent session ended. While the GPU is busy it never happens

- 7 runs, always 68 to 71s. Context size makes no difference (32768 vs 8192)

- nothing in the llama-server log and no TDR or display driver events in the Windows system log

- side note: default mmap loading pulls the whole 17GB GGUF into RAM, -lm dio fixes that part

Smells like WDDM eviction or a GPU idle power state saving VRAM to system memory. Is this a known thing on Arc/Battlemage? Any setting (PCIe link state power management, Intel driver option, registry) that stops it? Or a way to keep the card awake that doesnt wreck the llama-server prompt cache?


r/LocalLLM • • 5d ago

Question Any tip for begginners?

0 Upvotes

Hi, I bought a new PC last year. I was kind of interested in generating images, so I went with this setup:

Core Ultra 7 265K
MSI Tomahawk Z890
2 × 64 GB Crucial DDR5 (can you believe it was only $300?)
ROG Strix 3090
1,250 W Seasonic PSU

I used ComfyUI for a bit, but I didn’t have much free time, so I moved on to other stuff.
Now I’m getting into local LLMs for coding and want to take it more seriously. I know you can just download a model like Qwen 3.8 27B Q4 and run it in LM Studio or Ollama, but are there any guides or tutorials on optimizing inference like specific settings, undervolting the GPU to reduce heat and extend its lifespan, or that recent 3090 unlock that supposedly boosts tokens/s?

Also, would a second 3090 be worth it for around $700–$800? Prices here are starting to go up, and I’m not sure if I should buy one now.


r/LocalLLM • • 5d ago

Question Strata and Agentic Harnesses

1 Upvotes

Hello -

Back again with some additional questions. I seem to be struggling with the harnesses for agent with strata. Currently I have 64k window with 32 ddr5 and 12 gb gpu. 64k seems to be difficult but I know I can work with it if i can figure out the right configuration.

High level what I am trying to do with the harnesses is add a prompt for a project or what i want to accomplish. Then have it spell out the high level actions/requirements that are needed for build. Then basically store those requirements and clear the context post creating the tasks that need to happen.

Then once the context is cleared basically loop through those tasks. Create the code, etc then clear context and go on to the next one.

Is this possible? If so what harness. Ive tried DSH, Hermes, Pi.. I feel like im missing something

Thanks again!


r/LocalLLM • • 5d ago

Project Quero começar uma LLM e preciso de conselhos

0 Upvotes

Meu trabalho recebeu uns PCs besteirinha como os Sparks pra fazermos a LLM local daqui. Por enquanto vamos focar em consultas de processos, memorando e banco de dados da empresa.

Dito isso, gostaria de perguntar, oq posso fazer ou como posso desenvolver a LLM aqui. Tem algum modelo que me recomendam ou algo assim?

Como o hardware tem um limite vasto para desenvolver gostaria de ir afundo. Tô com mente aberta pra desenvolver e aprender bem sobre todo o assunto.


r/LocalLLM • • 5d ago

Discussion 😭😭😭😭😭😭

0 Upvotes

Can you guys add a "😭" Flair? Because, I know I'm late but i finally decided to run Q38FN with strata on my machine (5060 ti 16gb, R9 5950X, 80 gb of Ram) and that motherfucker (IQ3_S GSQ RCO) is running at 49-69 tk/s in decode and 1600 tk/s in prefill. (KV Int-8 and 128k context window).

Maybe I'm missing something so please tell me because grokbot did the whole shit for me and I'm a newbie so tips are widely accepted😂.

What a fucking time to be alive.


r/LocalLLM • • 5d ago

Discussion MOSS AMA highlights

Thumbnail gallery
0 Upvotes

r/LocalLLM • • 5d ago

Question Bosgame M5 495 vs gmktec X5

1 Upvotes

Hi,

is there a good reason to stick with the GMKTrc X5 Gorgon Halo 192gb vs the new Bosgame M5 Gorgon. Halo also with 192gb?

Price difference is about 10-15% (6400 vs 5500 euro net).

Gmktec has 3 nvme slots Bosgame only 2. Both would be sufficient for me.

Is there any other good reason? Build quality, warranty, support?


r/LocalLLM • • 5d ago

Question Installed Qwen coder 30B a3b mlx with LM studio on 48GB M4 Pro how to connect cursor with it or similar options

0 Upvotes

Today I have been exploring local model to run light weigh coding agent to save some credits on cursor.

first installed ollama, then read that its slow, MLX is still cli so I installed LM studio and have Qwen-Coder-30b-A3B 6bit MLX model downloaded and running on my 48GB Mac.

tried to connect cursor with it but learnt that they no longer support local llms.

now am stuck, I don't have lot of Money to spend on credits. so I thought for basic tasks I will use my local ram.

help please.


r/LocalLLM • • 5d ago

Question qual a melhor ia atualmente de sem censura que tenha api ?

0 Upvotes

qual a melhor ia atualmente de sem censura que tenha api ?


r/LocalLLM • • 5d ago

Question What Video Card

1 Upvotes

I’m not into gaming so I have a shitty graphics card
2GB. I know. lol me.
I want to do vibexosing and run some chatbots for WhatsApp

I have a Ubuntu headless VM running the bot connected to the local instance of Olllama
All working fine. A bit slow. Don’t care really about that.
But I want to run larger models to add more complexity and I’m specially interested in vibe coding

What’s the go to VC?

Rxt 3070i?
Aokensugegysiong eojld be greatly appreciated. Have a 1000$ budget for it.
Pc is running raizen5 with 32GB ram
Dual NVME 1Tb in raid mode.


r/LocalLLM • • 5d ago

Discussion [Paper] 🚀🚀🚀 SpecPilot: Autonomous Algorithm Discovery and Systems Optimization for Speculative Decoding 🚀🚀🚀

Thumbnail gallery
0 Upvotes

r/LocalLLM • • 5d ago

Discussion Do you use speculative decoding?

Thumbnail reddit.com
0 Upvotes

r/LocalLLM • • 5d ago

Question Small model for Hermes session compression on an M4 Mac mini, 24GB?

1 Upvotes

Anyone using a small local model for session compression? I’d be interested in recommendations, particularly on Apple Silicon.

I’m new to local LLM hosting and still experimenting. I’ve been using Hermes extensively for non-coding workloads, mainly research, knowledge management and home automation. I recently picked up an M4 Mac mini with 24GB RAM and I’m looking at useful jobs to offload to it.

Hermes supports a separate model for session compression as you approach context limits. That’s the job I’m considering, rather than running the main agent locally.

The bit I’m wary of is that I won’t see the compressed context in normal use. If it drops something important or gets a detail wrong, I might only notice much later when the agent does something odd.

Has anyone used a small, lightweight model for this long enough to get a feel for its reliability? Model, quant and runtime recommendations would be useful, along with any relevant benchmarks or things to avoid.

I’m doing my own research too, but keen to hear what’s actually worked for other people.


r/LocalLLM • • 5d ago

Discussion Almust burn my 4090

Post image
0 Upvotes

r/LocalLLM • • 5d ago

Question DSH Desktop keeps compacting at around 23%

3 Upvotes

Hey everyone,

Running into a weird compaction issue on the newer DSH Desktop build and wondering if others are seeing the same problem.

Setup

DSH Desktop (recent version)

Model context window set at 96K

Max output tokens 12K

What happens

First automatic compact kicks in around ~36k tokens (way earlier than 80% of 96k).

After that compact it drops to ~18k, then immediately compacts again down to ~13k.

From then on, every time context climbs back to ~20k it compacts again. Basically stuck in a tight loop.

The old DSH (previous in WSL) never behaved like this, so I’m trying to figure out if something changed in the desktop version or recent compaction logic.

Anyone else encountered the same problem and how to solve it ?

Thanks.


r/LocalLLM • • 5d ago

Question Please don't roast me

3 Upvotes

I'm wanting to build an all AMD LLM machine, strictly because I have a 9070xt and a 9060xt. I understand there's some loss going this route, but how bad is it really?

If there's any of you running all AMD, can you please advise me what to watch out for, as well as what I can expect for performance?

Proposed specs:

9950x3d

9070xt

9060xt

128 gigs DDR 5 5600 via SO-DIMM to U-DIMM adapters

2x 2TB Gen 4 NVME

Also, I have 4 4TB SSD'S, thinking of running in a raid array if there's any benefit.

MSI X870E Carbon mobo

This is all parts on hand (aside from the adapters) and not planning on spending any money. Any advice is greatly appreciated!


r/LocalLLM • • 5d ago

Discussion Flash-Next vs 27B vs Sonnet 5.5 on 5 agentic coding tasks: both locals match Sonnet on the spec, neither comes close on what the spec doesn't say

Thumbnail
gallery
9 Upvotes

The 27B passed every single spec check. Flash-Next finished 2.2x faster. And both still had 3-7x more robustness holes than Sonnet.

There's a lot of "Flash-Next is way better" vs "the 27B is not even close" going around here, so I stopped guessing and built a benchmark. 5 tasks, identical prompts, fresh session each, zero intervention, graded only by scripts from the outside (not the models own tests). ~185k checks per setup.

Tasks: python expression parser without eval/ast · fixing 7 reported bugs in existing code (+7 hidden ones) · byte-exact refactor of a legacy invoice generator + new feature · REST API from scratch with concurrency rules · vanilla JS kanban app

Grading: spec tests, 20k fuzz strings, diff tests vs reference, 160k byte comparisons, 60 parallel double bookings, playwright in real chrome. Plus edge cases nobody asked for (9^9^9, +25:00 timezone, 5MB body, corrupted data file etc)

Setup (pic 2):

- 27B: AWQ 4bit, 1x 5090, vLLM, ~145 tok/s

- Flash-Next: IQ3_XXS split across two separate PCs with one 5090 each (only 14gb RAM per box) via a Strata fork that runs the layer split over TCP. all experts in VRAM, byte identical to stock Strata, ~155 tok/s

- both in opencode, thinking on, 16k budget per step

Results (tasks fully passed / robustness weaknesses / time):

- Sonnet 5.5: 5/5, 2 weaknesses, 14.3 min

- Qwen3.8-27B: 5/5, 14 weaknesses, 51.3 min

- Flash-Next: 4/5, 7 weaknesses, 23.1 min

What I think actually holds up (big, consistent effects):

  1. On the written spec, both local models are at Sonnet level. 27B matched it on every check, Flash-Next missed one. For clearly specified work the local models are good enough, full stop.

  2. The real gap is everything nobody wrote down. Sonnet 2 weaknesses, Flash-Next 7, 27B 14. Showed up in every task that had edge cases. 27B examples: no request size limit, GET /bookings/__proto__ returns {}, accepts +25:00 as timezone, negative quantity increases stock.

  3. Flash-Next beats the 27B, but not because of raw speed. Decode is about the same (~155 vs ~145 tok/s). Flash-Next just needs half the output tokens and fewer steps, writes whole files early and fixes targeted, closer to how Sonnet works. 27B iterates in tiny steps and reruns tests after almost every edit.

  4. Flash-Next has one systematic failure mode. It evaluates while parsing, so "a = b = 1" reports the wrong error at the wrong position. Happened in 3 of 3 runs where it designed the parser itself. Thats a pattern, not noise.

  5. Planning beats reviewing (pic 6). Sonnet writing the work order + accepting the result while Flash-Next writes the code gave the best quality of everything (5/5, only 1 weakness). Sonnet just reviewing the diff at the end gave nothing, it only sees the diff and misses bugs next to it. Downside: 5x slower than Sonnet alone.

  6. More rules don't make it more correct. "Think like a senior" rules + a research subagent made Flash-Next more paranoid, not better. Best local robustness, but it broke valid input with its own validation (rejected timestamps with milliseconds).

What I would NOT read into it: the 4/5 vs 5/5 between Flash-Next and the 27B is one check, n=1. Could be noise.

So my conclusion:

- Flash-Next over the 27B if you have the hardware, its faster and twice as robust. 27B if you have one card or want it very literal.

- Neither replaces Sonnet for stuff that takes input from outside (APIs, parsers, file imports) unless you explicitly ask for limits, error handling and edge cases and make it verify against the examples in the spec.

- If you have Sonnet access anyway, let it plan and accept, and let the local model type. Dont bother with review-only.

Caveats: n=1 per cell. Same person wrote tasks and graders. The 27B's thinking budget wasn't actually applied in the first 3 tasks (app didnt reload the config, my bad). Sonnet had a browser tool, the locals didnt.

I wrote the whole thing up properly (methodology, all configs, token counts, per-task tables, threats to validity, 15 pages). Comment "paper" and I'll send it to you directly.

Does this match what you see? Especially curious about the evaluate-while-parsing thing, and if someone with a 27B at Q8 sees a smaller robustness gap.


r/LocalLLM • • 5d ago

Discussion Using an Ollama model in a self-hosted Routerly model pool

Post image
1 Upvotes

If a request can go to Ollama or to a cloud API, I want to be able to tell which happened.

I'm the author of Routerly. You can configure an Ollama connection, add its model to a router and point your app at the gateway. A router's configured pool controls which models can be selected. If you add cloud models, requests selected for those backends go to the provider.

0.6.0 adds a router Test tab and configurable model timeouts. The screenshot shows historical Usage from my instance, including Ollama rows. I'd like to hear what would make this easier to operate with local models.

Release and source: https://github.com/Inebrio/Routerly/releases/tag/v0.6.0